从基类静态方法调用派生类静态方法



我已经阅读了以下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 中解决它?

好的,给出

的答案(在我有机会评论/接受之前被删除(让我明白解决方案是多么简单(或者换句话说,我的问题是多么愚蠢:)

我所要做的就是将声明与实现分开(它都在一个 h 文件中 - 编码错误,我知道,这是一个永久的"临时"解决方案(

struct Base {
    static void f ();
    static void g ();
};
struct Derived : public Base {
    static void f();
};
int main() {
        Derived::g ();
        return 0;
}
void Base::f () {}
void Base::g () { Derived::f(); } 
void Derived::f() {}

最新更新