C++/CLI で、私が知っていると思っていたことに反するものに出くわしました。
通常、オブジェクトを関数に渡す場合は、ドットを使用してそのメソッドにアクセスします (これはref、いくつかの追加のコンストラクターを使用して、クラスでも機能します)。
value class Value {
void Print() { Console::WriteLine("Value"); }
};
void f(Value v) {
v.Print();
}
また、通常、インターフェイスを介してオブジェクトを関数に渡す^と、引数にa を付け->、メソッド呼び出しで使用する必要があります。
interface class Base {
void Print();
};
void f(Base ^b) {
b->Print();
}
ただし、fインターフェイスに基づく制約を使用してジェネリックを作成すると、コンパイラは を使用することを主張しますが、引数リストで->は使用しないことも主張します。^
interface class Base {
void Print();
};
generic <class T> where T : Base
void f(T t) {
t->Print();
}
これまで、オブジェクトを直接参照する場合は.常に を使用し、ハンドルを介して参照する場合は常に を使用すると信じていまし->た。これは、を使用してオブジェクトを直接参照しているように見えます->- 何が間違っているのですか?