class base
{
};
class derived
{
};
template<class T> void foo() {}
int main()
{
foo<int>();
foo<derived>();
}
我想对foo
专门化,因为T = base
的导数。这是可能的还是我需要专门为base
本身?
您可以将boost::enable_if和boost::is_base_of组合使用,如boost::enable_if的手册所述。
template <class T>
T foo(typename enable_if<boost::is_base_of<base,T> >::type* dummy = 0);
一种选择是使用boost类型特征(或者如果觉得勇敢,请查看该库的源代码)。
在编译时,您可以检测一个类型是否从另一个类型继承,从而选择适当的实现。