諸事情で C++/CLI を利用しています。 良いカオスっぷりですねコレ(ぉ
C++/CLI についてはよく知らない…ってか、C# も詳しく知らないわ、.NET についても詳しくない中ガリゴリ書いているのですが…
やっぱり、template と generic は違うんだなぁーと実感したコード。
// C++/CLI void func(array<int>^ i) { } void func(array<float>^ t) { } generic<typename T> void func2() { array<T>^ tag = gcnew array<T>(1); func(tag); // C2665 } void test() { func2<int>(); }
error C2665: 'jvmcli::func' : 2 オーバーロードのどれも、すべての引数の型を変換できませんでした 'void func(cli::array^)' の可能性があります。 with [ Type=int ] または 'void func(cli::array ^)' with [ Type=float ] 引数リスト '(cli::array ^)' を一致させようとしているとき
なんて怒られてしまいました(苦笑 orz
そりゃ確かに、静的には決まらないからなぁー
ちなみに、上記のコードの generic を template にすると普通に通ります。 そりゃ静的に型が決まりますからなぁー
// C++/CLI void func(array<int>^ i) { } void func(array<float>^ t) { } // OK template<typename T> void func2() { array<T>^ tag = gcnew array<T>(1); func(tag); } void test() { func2<int>(); }
で、generic な T で 呼ぶ関数を分ける / tag dispatch チックなコトするにはどうすりゃいいんっすかね。(ぉ orz