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