2

std::deque を使用したクラス Table があります

class Table {
public:
Table():columns_(10) {};
private:
  std::deque<Column> columns_
}

クラステーブルのみがクラス列を初期化できるようにしたいので、以下のようなことをします

class Column  {
private:
int a_;
friend class Table;
Column(): a_(1) {};
}

コンパイル中に STL コンテナーは、Columns クラスのコンストラクターが private であると不平を言いますが、これは理解していますが、クラス Table だけがクラス Column を初期化し、STL コンテナー内でそれを使用できることを保証する別の方法があります。

4

2 に答える 2

4

あなたの特定のケースでは、次の宣言を に追加するだけで十分Columnです:

friend class std::deque<Column>;

一般に、コンテナのサイズを事前に設定できないようなパターンが必要な場合は、簡単に構築できるオブジェクトを 1 つずつ追加する必要があります。

std::vectorただし、これをサポートするコンテナ ( など) では、 のreserve後にpush_back.

于 2013-06-07T13:56:07.770 に答える