私は基本クラスBase
といくつかのサブクラスを持っていBaseDerivate1
ます.. BaseDerivateN
. 私のコードの一部はジェネリックであり、 define を介して使用されたクラスにアクセスすることにより、サブクラスのいずれかをサポートしていますBASE_DERIVATE
。
ここで、子クラスが宣言できる静的関数を追加する必要がありますが、宣言する必要はありません。を宣言する派生クラスについてはStaticFunc()
、それを呼び出したいと思います。それ以外の場合は、フォールバック関数を呼び出したいと思いますBase::StaticFunc()
。呼び出しは次のようになります。
#define BASE_DERIVATE BaseDerivate1 // or some other child class
// somewhere else:
BASE_DERIVATE::StaticFunc();
そこで、ここでは意図的に名前を非表示にしています。StaticFunc
がクラス内から呼び出されることはありません。私が持っている質問は、これは C++ 標準でサポートされているのか、それとも一部のコンパイラでコンパイラ エラーが発生するのかということです。また、「静的継承」を行うためのより良い方法はありますか? しかし、私は定義のBASE_DERIVATE
概念にこだわっています。