妥協...
namespace Hoge { public ref class A {}; public ref class B {}; public ref class R {}; static const R^ Func( A^ a, B^ b ) {...} };
上記のようなコードからDLLを作成し,C#側から利用したいのですが,クラスA,B,Rは利用できるのに,Func関数は利用できません.
どうにも困ってしまったので,とりあえず,
namespace Hoge { public ref class A {}; ref class R; public ref class B { public: static const R^ Func( A^ a, B^ b ); }; public ref class R {}; const R^ B::Func( A^ a, B^ b ) {...} };
のようにしました.これ,いいのかな...
↓実際のコードはこんな感じ...
// Vector.h namespace KrdLab { namespace Numerical { // // ここには,いろいろ... // ref class Matrix; // 列ベクトル public ref class ColVector : public Vector { public: ... /* ColumnベクトルとRowベクトルの積から行列を生成する. */ static const Matrix^ operator*( ColVector^ cv, RowVector^ rv ); }; } } // Matrix.h namespace KrdLab { namespace Numerical { // 行列クラス public ref class Matrix { // いろいろ... }; // 行列を生成する演算 const Matrix^ ColVector::operator*( ColVector^ cv, RowVector^ rv ) { // Matrix,ColVector,RowVectorを使って,いろいろ... } } }
上記のように書くと,C#側から利用する際,イメージ通りの記述ができます.
using KrdLab.Numerical; ColVector cv = new ColVector(2); RowVector rv = new RowVector(2); cv[0] = 3; cv[1] = 4; rv[0] = 3; rv[1] = 4; Matrix m = cv * rv;
ところで,Matrix m = cv * rv;の部分なのですが,こういう書き方はC++的発想なのでしょうか?(^_^;