0
我已阅读下列SO问题:呼叫派生类的静态方法
- Calling derived class function from base class
- Call derived class method from base class reference
- What is object slicing?
但是我有一个关于一个稍微不同的问题静态方法和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();
我的问题是,怎么来的视觉-C++是不是在抱怨,我怎么能解决它在海湾合作委员会没有彻底改变我的代码?
我删除了答案,因为我很很确定Q中的代码不会在没有任何编译器扩展的情况下编译。我不知道为什么它会在MSVC中编译,也许是编译器扩展。 –
我认为一般MSVC不如GCC(这不是我第一次遇到在MSCV中编译但不在GCC中的代码)。无论如何,谢谢你,你的回答让我想起了一点点,找到了一个简单的解决方案...... –