假设我有两个类: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
and来专门化模板std::enable_if
。
我希望有人愿意帮助我!