【问题标题】:How do I expose namespaced C++ string constants via SWIG? (C#)如何通过 SWIG 公开命名空间 C++ 字符串常量? (C#)
【发布时间】:2013-02-03 02:19:09
【问题描述】:

在 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 打球。实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: c# c++ string swig


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      相关资源
      最近更新 更多