用于派生特定类型的函数模板专门化


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类型特征(或者如果觉得勇敢,请查看该库的源代码)。

在编译时,您可以检测一个类型是否从另一个类型继承,从而选择适当的实现。

最新更新