セットアップのexistanceに応じて、異なる機能の実装を提供する:クラスclassA
、及びclassA
を使用しているクラスclassB
あります。残念ながら、classB
をプログラミングすると、classA
に特定のメンバーsomeMember
があるかどうかわかりません。それに応じて、classB
のメンバー関数someFunction
は、どちらか一方の方法で実装されます。片方向がsomeMember
を使用しているので、someMember
がclassA
のメンバーではない場合、この関数インスタンスがコンパイルされないことが重要ですです。C++ 98:メンバ
質問:マクロ/定義とは別に、C++ 98の最適な解決策は何ですか?
MWE:
class classA
{
public:
// c'tor
classA()
{
//someMember = 3;
};
// does not have the member "someMember"
//int someMember;
};
class classB
{
public:
// only compile this function if "someMember" is a member of classB
int someFunction(classA a)
{
return a.someMember;
}
// ...and compile this one otherwise
int someFunction(classA a)
{
return 2;
}
};
// --- just to have an MWE: ---
#include<iostream>
int main()
{
classA a;
classB b;
cout << b.someFunction(a);
return 0;
}
「classAにsomeMemberかsomeMemberがあるかどうかわかりませんn 'classB'はあなたの実際のコードのテンプレートであり、' classA'はテンプレートのパラメータですか? – TartanLlama
いいえ、つまり、 'classA'のバージョンが異なっていて、' classA'のバージョンによって 'someMember'が使用されているかどうかに依存します。これは互換性と構成上の問題です。 'classA'は私の(' classB')ソフトウェアコンポーネントと異なるバージョンで組み合わせることができる別のソフトウェアコンポーネントの中にあります。 – matheburg
https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Member_Detector – acraig5075