2

C++ で名前空間付きのコンパイル時定数文字列を公開するには、さまざまな方法があります。

C++ で次のように参照できるように、SWIG を介して C++ と C# の間で共有したいこれらがたくさんあります。

Foo::Bar::SomeConstant

C# では次のようになります。

Foo.Bar.SomeConstant

const char*C++ 側がまたはであるかどうかはあまり気にしませんがstd::string、衝突を避けるために名前空間が必要です。

これをヘッダーファイルにぶつけたいだけです:

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

しかし、SWIG を使用してその C# 側でボールをプレーすることはできないようです。これを達成するための最良の方法は何ですか?

4

1 に答える 1

0

名前空間に構造体をネストし、それらにプライベート コンストラクターと public static const std::string メンバー (別の cpp ファイルに入力) を与えることで、これを解決することになりました。

これにより、pinvoke で生成されたコードにゲッターが作成され、SWIG は静的な読み取り専用の C# プロパティをゲッターのみでラップします。これは、まさに私が望んでいるものです。

(C# ランドで単一の静的インスタンスを作成するのではなく) C# プロパティを使用するたびに C# 文字列を作成することになることは注目に値しますが、それは私のユースケースでは問題ありません。

于 2013-02-25T22:04:54.737 に答える