私は次の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 で解決するにはどうすればよいですか?