Скажем, у меня есть два класса: Serializable
и Printable
.
Таким образом, простая функция шаблона, которая принимает все производные классы Printable
, может выглядеть так:
template <class T, class B = Printable, class = typename std::enable_if<std::is_base_of<B, T>::value>::type>
void print(T value) {
cout << value << endl;
}
Однако, если я хочу, чтобы он принимал также все производные классы Serializable
, пока я все еще контролирую тело функции, это, очевидно, не сработает:
template <class T, class B = Printable, class = typename std::enable_if<std::is_base_of<B, T>::value>::type>
void print(T value) {
cout << value << endl;
}
template <class T, class B = Serializable, class = typename std::enable_if<std::is_base_of<B, T>::value>::type>
void print(T value) {
cout << value << endl;
}
// Error: Redefinition of ...
Поэтому я решил, что оставшиеся решения этой проблемы - это специализированные шаблоны.
Но я просто не могу понять, как я могу специализировать шаблон в комбинации с std::is_base_of
и std::enable_if
.
Я надеюсь, что кто-то захочет помочь мне!