【发布时间】:2016-03-17 07:36:33
【问题描述】:
我在重写基类的静态方法时遇到了一点问题,但整个问题非常复杂且太长(游戏引擎中资源管理的泛化),所以这里有一个简化版本:
template<class T>
class base
{
static void bar()
{ printf("bar"); }
public:
static void foo()
{ bar(); }
};
class derived : public base<int>
{
static void bar()
{ printf("baz"); }
};
int main() { derived::foo(); }
上面的代码在我的例子中输出“bar”,我希望它输出“baz”。我该怎么办?似乎无论我尝试什么,base::foo() 总是调用 base::bar()。我的设计可能有问题。我从来没有遇到过这个问题 - 我该如何解决?
【问题讨论】:
-
您不能覆盖静态方法。你可以重载它们(这就是你在这里所做的),但你只是得到静态调度。我想你可以使用CRTP。
标签: c++ inheritance static