- ベストアンサー
C++/CLIでクラス内の要素を相互利用する方法
- C++/CLIでクラスの中に定義された構造体等を複数のクラス間で相互利用する方法について説明します。
- クラス内で定義された要素を他のクラスで使用するためには、クラスの宣言を行う必要があります。
- C++/CLIでは、クラス内の要素を相互に利用することが可能ですが、enumの場合には注意が必要です。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 どうやら、無理な様です。 列挙体をクラスの外に出して一番上に書けば解決ですが、如何してもクラス内に置く事を死守するのであれば、「4」のメンバ関数をテンプレートにして、class2::enum2が見えている所でテンプレートの全特化を行えば出来ます。 以下参考程度になれば。 // clrconsole.cpp : メイン プロジェクト ファイルです。 #include"stdafx.h" using namespace System; ref class class1; ref class class2; ref class class1 { public: enum struct enum1 { aa,bb }; void func1a(class1^ obj){} // 1. OK void func2a(class2^ obj){} // 2. OK void func1b(class1::enum1 e){} // 3. OK template<class _Enum> void func2b(_Enum e);// 4. 中身を引っこ抜く }; ref class class2 { public: enum struct enum2 { aa,bb }; void func1a(class1^ obj){} // 5. OK void func2a(class2^ obj){} // 6. OK void func1b(class1::enum1 e){} // 7. OK void func2b(class2::enum2 e){} // 8. OK }; // 4. 中身 template<> void class1::func2b<class2::enum2>(class2::enum2 e) { //class2::enum2の時のみ } int main(array<System::String ^> ^args) { class1^ c = gcnew class1(); c->func2b(class2::enum2::aa); c->func2b(class2::enum2::bb); //適合しないenumを入れるとリンクエラーになる //c->func2b(class1::enum1::aa); //c->func2b(class1::enum1::bb); return 0; }
お礼
回答ありがとうございます。 やっぱり無理なんでしょうか... テンプレートを使うというのは思いつかなかったですが、そこまでするのであれば、個人的な好みでいえば void func2b(int e); c->func2b((int)class1::enum1::aa); のほうが良いかと思います。これだと普通のC++の型安全度と同じなので。