始動

以前C++で作成した数値計算用行列クラス(以降C++Matrix)を,何とかしてC#に移植できないかと考えてみました.

C#で使用するためには,CLR上で動作するようにしなければなりません.CLRに準拠したコードはマネージコード(managed code)と呼ばれます(CLRに管理されるから,ネイティブコードは管理されない).

自作したC++Matrixは,内部でCLAPACKを使用しており,ネイティブコードが混在することになります.しかし,CLAPACKは有名な数値計算ライブラリであるため,これは変更したくありません.

そこで,一度C++/CLI化し,C#から利用可能なDLLを作成することにしました(常套手段ですね).C++/CLIは,マネージコードからネイティブコードを呼び出すことができるため,Cで書かれたライブラリを利用することができます.
@IT:特集:Visual C++ 2005 いままたC++が熱い!「C++/CLI」として大進化したVisual C++ 2005


私は,C++/CLIをあまりよく知りません.少々戸惑うこともありました.

  • ref class は,const,volatile 関数を持つことができない
  • そのため,func( const Hoge^ h )としてしまうと,メンバを呼び出せなくなる
  • operator[]をインデクサに書き換えなければならない(こんな感じ↓)
property int default[int]
{
  void set(int i, int value) { *(p+i) = value; }
  int get(int i) { return *(p+i); }
}
  • friend 関数が使えない(C++では,2項演算子の定義に使用していたのだが...)

まだ移植し切れていませんが,これから少しずつ進めていこうと思っています(余りこれに時間を割くことができないのですが...(^_^;).