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();
}
これまで、オブジェクトを直接参照する場合は.
常に を使用し、ハンドルを介して参照する場合は常に を使用すると信じていまし->
た。これは、を使用してオブジェクトを直接参照しているように見えます->
- 何が間違っているのですか?