- 締切済み
C++のテンプレート関数やテンプレートクラスをC#で利用するには?
C++で作成したテンプレート関数やテンプレートクラス をC#で利用したいと考えております。 テンプレート関数やクラスを明示的実体化してコンパイルし、 C++/CLIでラップすればC#でも使えるという話を聞きました。 テンプレートでない通常の関数やクラスの場合は、 http://www.atmarkit.co.jp/fdotnet/special/vcppinvista01/vcppinvista01_01.html で紹介されているのを見つけたのですが、 テンプレート関数やクラスの場合 具体的にC++/CLI側でどのように記述すればよいか分かりません。 例えば、 ---- [test.h] template <class Type1> class Test{ public: Type1 x; template <class Type2> Type1 func(Type2 y){ ... } }; ----- のようなクラスがあった場合、どうすればよいでしょうか。 明示的な実体化の方法とC++/CLIで明示的実体化した関数やクラスが どのような名前になるのかが分かれば上記サイトの方法で いけるのではないかと思っているのですが…。 環境はVisual Studio2005(or 2008)です。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
回答No.3
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
回答No.2
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
回答No.1
お礼
お礼が遅くなり申し訳ありません。 ファイルまでアップしていただきありがとうございます。 C++側をまずスタティックライブラリにする 場合の方法は結局よく分かりませんでしたが、 UPしていただいたファイルのように 全てC++/CLI側のソースに集めて書く方法もあったのですね。 おかげさまで意図していたことはできそうです。 (実は某画像処理系のC++テンプレートライブラリをC#で使いたかったのです。) ありがとうございます。 ただ、C++のテンプレート関数で void func(Test<long> &x) のような、コンテナが引数の関数をラップする場合、 スマートな方法が思いつかないのですが、 friend関数はマネージ型には使えないようなので、 サンプルにおけるポインタimpl_をpublicにして void func_w(Test_long^ x){ func(*(x->impl_)); } のように実現することになるといったところなのでしょうか。 お忙しいところ、御回答ありがとうございました。