【发布时间】:2010-11-22 21:24:26
【问题描述】:
我有以下问题:
class Base
{
};
class Derived : public Base
{
};
class Different
{
};
class X
{
public:
template <typename T>
static const char *func(T *data)
{
// Do something generic...
return "Generic";
}
static const char *func(Base *data)
{
// Do something specific...
return "Specific";
}
};
如果我现在这样做
Derived derived;
Different different;
std::cout << "Derived: " << X::func(&derived) << std::endl;
std::cout << "Different: " << X::func(&different) << std::endl;
我明白了
Derived: Generic
Different: Generic
但我想要的是,对于从 Base 派生的所有类,都会调用特定方法。 所以结果应该是:
Derived: Specific
Different: Generic
有什么方法可以重新设计 X:func(...)s 来实现这个目标?
编辑:
假设 X::func(...) 的调用者不知道作为参数提交的类是否派生自 Base。所以铸造到基地不是一种选择。 事实上,整个事情背后的想法是 X::func(...) 应该“检测”参数是否来自 Base 并调用不同的代码。 出于性能原因,应该在编译时进行“检测”。
【问题讨论】:
标签: c++ templates methods overloading