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

时间:2011-10-19 15:24:33

标签: c++ templates template-specialization

class base
{
};

class derived
{
};

template<class T> void foo() {}


int main()
{
    foo<int>();
    foo<derived>();
}

我想将foo专门用于T = base的推导。这是可能的还是我需要专注于base本身?

2 个答案:

答案 0 :(得分:1)

你可以结合使用boost :: enable_if和boost :: is_base_of,记录为in the manual for boost::enable_if

template <class T>
T foo(typename enable_if<boost::is_base_of<base,T> >::type* dummy = 0); 

答案 1 :(得分:0)

一种选择是使用boost type traits(或者如果感到勇敢,请查看该库的来源)。

在编译时,您可以检测某个类型是否继承自另一个类型,因此请选择适当的实现。