如何通过SWIG公开名称空间的C++字符串常量?(C#)
How do I expose namespaced C++ string constants via SWIG? (C#)
在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";
}
}
但我似乎无法让C队用SWIG打球。实现这一目标的最佳方式是什么?
我最终通过在命名空间中嵌套结构并为它们提供私有构造函数和公共静态conststd::字符串成员(填充在单独的cpp文件中)来解决这个问题。
这在pinvoke生成的代码中创建了getter,SWIG用静态只读C#属性包装这些代码,而这些属性只使用getter,这正是我想要的。
值得注意的是,每次使用C#属性时都会生成一个C#字符串(而不是在C#-land中生成一个静态实例),但这对我的用例来说很好。
相关文章:
- 将常量字符串添加到非常量字符串是否会给出常量字符串
- 将收到的 usart uint8_t* 数据与常量字符串进行比较
- 为什么文字不是常量(字符串除外)?
- public:静态常量字符串声明/初始化问题
- 如何打印出常量字符串的第一个元素?
- 为什么在类体中无法启动静态常量字符串成员
- 如何从常量字符串初始化 LPWSTR?
- 如何在 C++03 中没有重复代码的情况下在堆栈上创建一个非常量 C 字符串数组?
- 需要帮助理解' 字符串 ltrim(常量字符串 &) ' 的含义
- 从常量字符串到布尔值的隐式强制转换
- 比较字符和常量字符串
- C++ lambda 到 std::函数错误与非常量字符串
- 让每个常量字符串都被引用是好的做法吗?
- 外部常量字符串的链接错误
- 无法初始化静态常量字符串
- 如何更改静态链接库中常量字符串数组的Visual Studio C++初始化顺序
- 对已编译的可执行文件中的常量字符串(例如密码)进行加密
- C++ 构造函数中的常量字符串 &name 和字符串名称之间的差异
- 哪个是正确的:矢量<常量字符串>或常量矢量<string>?
- 为什么字符串在函数参数中作为常量字符串传递