2

有多种方法可以在 C++ 中公开命名空间的编译时常量字符串。

我有一堆这些我想通过 SWIG 在 C++ 和 C# 之间共享,以便我可以在 C++ 中像这样引用它们:

Foo::Bar::SomeConstant

在 C# 中就像这样:

Foo.Bar.SomeConstant

我真的不在乎 C++ 方面是否是const char*or std::string,但我确实需要命名空间以避免冲突。

我宁愿把它放在头文件中:

namespace Foo
{
    namespace Bar
    {
        const char* const SomeConstant = "hello world";
    }
}

但我似乎无法让 C# 方面使用 SWIG 打球。实现这一目标的最佳方法是什么?

4

1 回答 1

0

我最终通过在命名空间中嵌套结构并为它们提供私有构造函数和公共静态 const std::string 成员(填充在单独的 cpp 文件中)来解决这个问题。

这会在 SWIG 使用仅带有 getter 的静态只读 C# 属性包装的 pinvoke 生成代码中创建 getter,这几乎正是我想要的。

值得注意的是,每次使用 C# 属性时都会创建一个 C# 字符串(而不是在 C#-land 中创建单个静态实例),但这对我的用例来说很好。

于 2013-02-25T22:04:54.737 回答