我已阅读以下 SO 问题:
但是,关于静态方法以及 Visual-c++ 和 gcc 之间的区别,我有一个稍微不同的问题。
我有一个类,它捆绑了一些与给定任务相关的静态方法。我想实现每个方法的简单版本,并在未来允许更有效的实现。我通过实现基类中的所有方法并从派生类调用方法来做到这一点。这样,具有“较新”实现的方法将隐藏“旧”实现。我的问题是,当一个方法g()
调用另一个方法时f()
,我想验证派生类中的实现是否被调用(如果存在)。我不能使用虚拟方法,因为我的方法都是静态的。在 visual-c++ 中,以下代码正在执行我刚刚描述的操作,但 gcc 不会编译 - 实际上我很惊讶 visual-c++ 编译正常。(我需要我的代码在两者上编译)
struct Base {
static void f () {}
static void g () { Derived::f(); } //--- visual-c++ compiles ok; gcc: "'Derived' was not declared in this scope"
};
struct Derived : public Base {
static void f () {}
};
Derived::g ();
我的问题是,为什么 visual-c++ 没有抱怨,我如何在 gcc 中解决它而不对我的代码进行根本性的改变?