4

次のように、構造体の STL ベクトルを含む構造体を使用する C++ ライブラリがあります。

struct Params
{
    // values...
}

struct Settings
{
    std::vector<Params> m_params;

    // values...
}

ライブラリの CLI ラッパーを作成していますが、上記の構造体型に相当するものが必要です。次のように、リストをベクトルと同等のものとして使用することを考えていました。

public value struct Params
{
    // values...
}

public value struct Settings
{
    List<Params>^ Params;

    // values...
}

ただし、List<T> は参照型であるため、リストは値ではなく参照によって渡されます。残りのメンバーとともに、値で渡されるリスト (または類似のもの) を含む CLI クラスを作成する方法はありますか?

4

3 に答える 3

1

コピーコンストラクターなどの「値型にはユーザー定義の特別なメンバー関数を含めることはできません」( C3417 から)ため、 Settings クラスを値で渡すことはできないと思います。

以下を使用して同様の効果を得ることができます。

public value struct Settings : public ICloneable
{
    List<Params>^ m_params;

    virtual Object^ Clone()
    {
        Settings^ rv = gcnew Settings();
        rv->m_params = gcnew List<Params>();
        rv->m_params->AddRange(m_params->ToArray());
        return rv;
    }
}

C# コードでは、次のようになります。

Settings s1, s2;
// ... some code modifying s1
s2 = (Settings)s1.Clone();

Settings settings1 = settings2;これは、値渡しで得られるスタイル構文とほぼ同じくらいきれいです。

于 2010-01-20T06:17:41.150 に答える
0

List<Params>^% Params;代わりにどうList<Params%>^% Params;ですか?

于 2010-01-25T20:01:18.850 に答える