class base
{
};
class derived
{
};
template<class T> void foo() {}
int main()
{
foo<int>();
foo<derived>();
}
我想将foo
专门用于T = base
的推导。这是可能的还是我需要专注于base
本身?
答案 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(或者如果感到勇敢,请查看该库的来源)。
在编译时,您可以检测某个类型是否继承自另一个类型,因此请选择适当的实现。