1

私のC++コードには、プライベートメンバーとしてペアのマップを持つクラスがあり、それらのペアを別のクラス(これもプライベート)に保持される新しいベクトルにコピーする必要があります。これらのコンテナが両方ともmain()にある場合、copy()を使用して非常に簡単に実行できますが、copy()は私のクラスでは機能しません。私の制約を考えると、最も簡単なアプローチは何ですか?

4

1 に答える 1

0

クラス定義にアクセスできる場合はfriend、各クラスのプライベートメンバーにアクセスし、あるクラスから別のクラスにプライベートメンバーをコピーするために使用できる特別な関数を作成できます。

例えば:

class B; //forward declaration

class A
{
    private:
        //... private data members

    public:
        //... methods, etc.

        friend void copy(const A&, B&);
};

class B
{
    private:
        //... private data members

    public:
        //... methods, etc.

        friend void copy(const A&, B&);
};

void copy(const A& rhs, B& lhs)
{
    //... copy the private elements out of class A into class B
}

もちろん、クラス定義にアクセスできる場合は、クラスの1つに単純なメソッドを追加したり、一方のクラスをもう一方のクラスに宣言したりするなど、さまざまなことができますfriend。他の誰かがコードを作成し、それらのデータメンバーをプライベートと宣言した場合、ユースケースを見逃したか、そのデータに触れてはいけません...

于 2012-10-01T02:33:37.110 に答える