【发布时间】:2012-08-28 07:39:00
【问题描述】:
考虑到类模板,可以使用类型特征和虚拟启动器模板参数为某些类型的组提供模板特化。我已经asked that earlier了。
现在,对于函数模板,我需要同样的东西:即,我有一个模板函数,并且想要对一组类型进行专门化,例如,作为类 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
}
但是,这不起作用,因为函数模板不允许部分特化。那么该怎么做呢?也许是类型特征作为类型的默认参数?但是代码看起来怎么样呢?
【问题讨论】:
-
你实际上用这个做什么?更喜欢重载函数而不是专门化它们的模板。希望您的预期用途允许这样做。
标签: c++ templates typetraits function-templates