在C ++中有多种方法可以公开命名空间的编译时常量字符串。
我有很多这些我希望通过SWIG在C ++和C#之间共享,所以我可以在C ++中像这样引用它们:
Foo::Bar::SomeConstant
和C#中的相似:
Foo.Bar.SomeConstant
我真的不在乎C ++方面是const char*
还是std::string
,但我确实需要命名空间来避免冲突。
我更喜欢在头文件中输入:
namespace Foo
{
namespace Bar
{
const char* const SomeConstant = "hello world";
}
}
但是我似乎无法通过SWIG获得C#球。实现这一目标的最佳方法是什么?
答案 0 :(得分:0)
我最终通过在一个命名空间中嵌套结构并给它们私有构造函数和公共静态const std :: string成员(填充在单独的cpp文件中)来解决这个问题。
这会在pinvoke生成的代码中创建getters,SWIG使用仅具有getter的静态只读C#属性包装,这正是我想要的。
值得注意的是,每次使用C#属性时最终都会生成一个C#字符串(而不是在C#-land中创建一个静态实例),但这对我的用例来说很好。