C#とネイティブC++を相互運用するためのC++/CLIラッパークラスがあります。 System.Nullable
に関連した奇妙なエラーが発生しています。私は、基本的なタイプの場合、System.Nullable<T>
はT?
に相当することを理解しています。'System.ValueType'型を暗黙的に 'int?'に変換できません。
のC#:
public int? RoboticsArmRotation {
get { return mRobotics.ArmRotation; }
}
C++/CLI、インターフェース:
virtual property System::Nullable<int>^ ArmRotation{ System::Nullable<int>^ get() = 0; }
は、C++/CLI、具象クラス:だから私はこれを行う
virtual property System::Nullable<int>^ ArmRotation {
System::Nullable<int>^ get() {
boost::optional<int> value = m_pNativeInstance->getArmRotation();
return value.is_initialized()? gcnew System::Nullable<int>(value.get()) : gcnew System::Nullable<int>();
}
}
をしかし、私はタイトルのを取得しますコンパイルエラー。 int?
にキャスティングすると解決しますが、nullableを参照として定義したときにはSystem.ValueType
と言っています。キャストを離れることができますか?何か間違っていますか?
'Nullable'は値型であり、参照型ではありません。 –
私は管理されたC++については何も知りませんが、 'gcnew'が必要ですか? 'Nullable'は値型であり、参照型ではありません。 'gcnew'ボックスが表示されるのでしょうか、それとも参照型に対してのみ機能しますか? –
@ LasseV.Karlsen C++/CLIでは、ボックス型の値型で強く型付けされた方法で作業できます。これは 'System.ValueType'(参照型)といくつかのメタデータに変換されます。 – CodesInChaos