3

その行を c# から c++/cli に変換したい

Idocobj is IPart

IPart はインターフェイスで、Idocobj はオブジェクトです。この変換を行う方法はありますか。

私はこのコードを使用しました:

Idocobj->GetType() == IPart::typeid 

しかし、それは機能しません

4

1 に答える 1

3

dynamic_cast「is」を確認するために使用できます。次に例を示します。

using namespace System;
namespace NS
{
  public interface class IFoo
  {
    void Test();
  };

  public ref class Foo : public IFoo
  {
  public: virtual void Test() {}
  };
  public ref class Bar
  {
  public: virtual void Test() {}
  };
}

template<class T, class U> 
bool isinst(U u) {
  return dynamic_cast< T >(u) != nullptr;
}

int main()
{
    NS::Foo^ f = gcnew NS::Foo();
    NS::Bar^ b = gcnew NS::Bar();

    if (isinst<NS::IFoo^>(f))
      Console::WriteLine("f is IFoo");

    if (isinst<NS::IFoo^>(b) == false)
      Console::WriteLine("f is not IFoo");

    Console::ReadKey();
}

しかし、通常、「is」を使用することはありません...常にチェックで何かをしたいので、通常は「as」を使用して、直接マップしdynamic_castます:

NS::IFoo^ ifoo = dynamic_cast<NS::IFoo^>(f);
if (ifoo != nullptr)
{
  // Do something...
 ifoo->Test();
}
于 2013-07-16T08:30:32.557 に答える