【发布时间】:2015-11-11 16:33:34
【问题描述】:
我有一个现有的模板类,它适用于所有类型的数据类型。但是现在我需要将它专门用于派生自特定类的类。但不是整个类都应该专门化,而只是一些功能。
我尝试按照this post 中的描述进行操作。
class BaseClass
{
public:
bool DoSomething()
{
return true;
}
};
class SubClass : BaseClass
{
};
template<typename T, typename _Alloc = std::allocator<T>>
class TemplateClass
{
public:
template<typename U = T, typename std::enable_if<
!std::is_base_of<BaseClass, U>::value>::type>
void print_line()
{
std::cout << "Parameter of general Type T" << std::endl;
}
template<typename U = T, typename std::enable_if<
std::is_base_of<BaseClass, U>::value>::type>
void print_line()
{
std::cout << "Parameter of specific Type BaseClass" << std::endl;
}
};
我尝试使用这样的模板:
TemplateClass<BaseClass>* tc1 = new TemplateClass<BaseClass>();
tc1->print_line();
TemplateClass<SubClass>* tc2 = new TemplateClass<SubClass>();
tc2->print_line();
TemplateClass<int>* tc3 = new TemplateClass<int>();
tc3->print_line();
对于每个函数调用,我都会收到错误,找不到合适的方法。 另一点是this article 他们说 enable_if 不应该用于在实现之间进行选择。
有谁知道我的错误是什么或如何正确地做到这一点? 提前致谢!
【问题讨论】:
-
你试过标签调度吗?
标签: c++ templates specialization