Может шаблон расширить класс в функции C ++?

У меня есть функция, которая имеет шаблон шаблона в качестве параметра:

template<class T> void scheduleTask(T* a);

Но я хочу, чтобы класс, вызвавший эту функцию, расширил класс «Runnnable», в Java вы можете сделать это следующим образом:

public <T extends Runnable> void scheduleTask(T a);

Если я могу, как бы я сделал это в C ++?

3

Решение

У вас есть возможность применить это ограничение с std::is_base_of, У вас есть два варианта использования.

Влияет на разрешение перегрузки с помощью SFINAE:

template<typename T, typename = typename std::enable_if<std::is_base_of<Runnable, T>::value, T>::type>
void scheduleTask(T *a) {...}

Очиститель, выдает приятное сообщение об ошибке, но не влияет на разрешение перегрузки:

template<typename T>
void scheduleTask(T *a) {
static_assert(std::is_base_of<Runnable, T>::value, "T must be derived from Runnable");
...
}

Оба из них требуют C ++ 11. Я знаю, что у Boost есть пара уловок, если у вас нет доступа к C ++ 11.

Тем не менее, как говорит Джерри в комментариях, может иметь больше смысла вообще не использовать шаблон. Если вы посмотрите на этот вопрос и все еще уверены, что он вам нужен, это должно сработать.

7

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector