【发布时间】:2016-08-08 08:54:44
【问题描述】:
template<typename T> struct Derived: T
{
/*static*/ int foo(int x) { return T::foo(x) + 1; }
};
如果T::foo(int x) 是static,那么Derived<T>::foo(int x) 也应该是static。否则Derived<T>::foo(int x) 应该是非静态的。
有没有办法让编译器处理这个问题?
【问题讨论】:
-
您正在直接调用 T::foo(x) 而没有对象。这意味着 T::foo 是绝对静态的。那么歧义在哪里呢?
-
旁白:我对这实际上可能成为问题的设计有点怀疑。其他可能出现的问题包括他们是否需要使用指向函数的指针或指向成员函数的指针来引用不明确的方法。
-
@HumamHelfawi, “这意味着 T::foo 是绝对静态的”。不,不是那个意思。
T是一个基类,当有人打算显式调用同名的基类方法时,此时范围解析运算符是唯一的方法。因此,T::foo可以或不能是static。 OP 似乎希望为基类和派生类维护staticness。似乎是个好问题。在某些情况下需要它。 -
@iammilind,是的,这就是我想要的。我开发可能是静态的或有状态的分配器。派生类是分配器的装饰器,为其添加了一些功能。但是,如果我在没有 static 关键字的情况下编写它,则分配器会失去其静态性并被视为具有状态。
-
@GLmonster 我编辑了您的问题,以使您的意思更清楚。请检查它是否仍然意味着您想要的。