我有這樣的情況,即我有一個對所有類型的數據類型都適用的現有模板類。但是現在我需要將它專門化爲來自特定類的類。但是並不是所有的班級都應該是專業化的,而只是一些功能。模板類中的C++專用單一方法
我試圖按照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不應該用於實現之間進行選擇。
有沒有人有想法我的錯誤是什麼或如何正確地做到這一點? 在此先感謝!
你有沒有試過標籤調度? – zahir