2

我有一个非.NET C++ 类,如下所示:

富.h:

namespace foo {
  const static std::string FOO;
  ...
}

Foo.cc:

using namespace foo;

const std::string FOO = "foo";

我想公开它以在 C# 应用程序中使用,但是当我尝试以下操作时,我不断收到有关混合类型的错误:

FooManaged.h:

namespace foo {
  namespace NET {
    public ref class Foo {
      public:
        const static std::string FOO;
    }
  }
} 

FooManaged.cc:

using namespace foo::NET;

const std::string Foo::FOO = foo::FOO;

将非托管字符串常量转换为托管字符串常量的正确方法是什么?

4

1 回答 1

3

在 C++/CLI 中,使用literal关键字代替static const您希望常量定义包含在向完全托管应用程序公开的接口中的位置。

public:
    literal String^ Foo = "foo";

不幸的是,literal它需要一个立即值,因此std::string无法使用该值。作为替代方案,您可以创建一个返回字符串的静态只读属性。

public:
    static property String^ Foo
    {
        String^ get()
        {
            return gcnew String(Foo::FOO.c_str()); 
        }
    }

就个人而言,我相信再次重写字符串并使用literal是更好的选择。但是,如果您高度关注不断变化(例如在较新的版本中),该属性将使用FOO本机库中的版本。

于 2009-11-22T11:23:28.243 回答