考虑到类模板,可以使用类型特征和虚拟启动器模板参数为某些类型的组提供模板特化。我之前已经问过了。
现在,对于函数模板,我需要同样的东西:即,我有一个模板函数,并且想要对一组类型进行专门化,例如,作为 class 子类型的所有类型X
。我可以用这样的类型特征来表达这一点:
std::enable_if<std::is_base_of<X, T>::value>::type
我想过这样做:
template <typename T, typename ENABLE = void>
void foo(){
//Do something
}
template <typename T>
void foo<T,std::enable_if<std::is_base_of<A, T>::value>::type>(){
//Do something different
}
但是,这不起作用,因为函数模板不允许部分特化。那么该怎么做呢?也许是类型特征作为类型的默认参数?但是代码看起来如何呢?