【发布时间】:2014-02-04 21:03:59
【问题描述】:
我环顾四周,并没有找到我要找的东西。基本上我想要一个由基类专门化的函数模板。我不知道如何使它使用专门的功能。
意思...
class IBase
{
public:
virtual std::string func() const = 0;
};
class MyClass : public IBase
{
public:
std::string func() const { return "From MyClass"; }
};
template <class T>
std::string get_func(const T* t)
{
return "Unknown";
}
template <>
std::string get_func<IBase>(const IBase* t)
{
return t->func();
}
int main()
{
int a;
MyClass b;
get_func(&a); // <- Returns 'Unknown'. Good.
get_func(&b); // <- Returns 'Unknown'. Bad, want 'From MyClass'.
}
我之所以使用const T* 是因为IBase 是抽象的。
【问题讨论】:
-
请始终为您的问题添加语言标签。这也启用(自动)语法突出显示。
-
通常,您不想专门化函数模板,而是重载它。在您的情况下,这也可以解决问题:如果为函数调用的参数推导的类型与您专门使用的类型完全匹配,则仅使用该专门化。
-
是的。另一方面,函数模板比函数重载更严格。有些事情你可以用函数模板做,但不能用重载。
标签: c++ templates template-specialization function-templates