如何检查c ++ / cli中的接口类型

时间:2013-07-16 08:01:39

标签: c++-cli

我想将该行从c#转换为c ++ / cli

Idocobj is IPart

IPart是一个界面,Idocobj是一个对象。有没有办法进行这种转换。

我使用了这段代码:

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

但它不起作用

1 个答案:

答案 0 :(得分:2)

您可以使用dynamic_cast来检查“是”。这是一个例子:

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();
}

但通常情况下,你从不使用“是”....你总是想用支票做点什么......所以通常你应该使用直接映射到dynamic_cast的“as”:

NS::IFoo^ ifoo = dynamic_cast<NS::IFoo^>(f);
if (ifoo != nullptr)
{
  // Do something...
 ifoo->Test();
}