私は一連の C++ クラスを持っていますが、それらはすべて機能的に同一である必要がありますが、それ以外は継承によって関連付けられていません。事実上、これらのクラスは名前のみが異なります。(これらのクラスはスローされ、いくつかの基本クラスの catch 句がスローされた派生オブジェクトをむさぼり食うのは望ましくありません。派生クラスは存在しますが、常に分離されているスローされたクラスの個別のセットを作成したいと考えています。 catch ブロックが関係します。)
もちろん、これの欠点はソース コードの複製です。何かを変更する必要があるたびに、同じコードの N 個のコピーを更新する必要はありません。
#define を使用して、コードの重複の問題を解決しました。しかし、代わりにテンプレートを活用できれば、デバッグ機能が向上すると思います。テンプレートでパラメーター化されるのは、クラス名自体だけです。
次のことを試みましたが、gcc では機能しませんでした (c++0x サポートが有効になっている場合):
template<typename ClassName>
class ClassName
{
public:
ClassName(int foo, float bar) { ... }
~ClassName() { ... }
bool SomePublicMethod() { ... }
private:
...
}
次に、実際のクラスを次のようなもので宣言します。
typedef ClassName<UnrelatedClass1> UnrelatedClass1;
typedef ClassName<UnrelatedClass2> UnrelatedClass2;
上記が機能しないことは既に知っています。私が達成したいことの概念的な例としてこれを提供していますが、現在使用している #define マクロ メソッド (デバッグ能力の低下に悩まされている) 以外に、それを機能させる方法があるかどうか疑問に思っています。 )