2

我有一个使用 std::deque 的类表

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

我希望只有类表可以初始化类列,所以我执行如下操作

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

在编译期间,STL 容器抱怨 Columns 类的构造函数是私有的,我理解,但是有另一种方法可以确保只有类 Table 可以初始化类 Column 并且仍然能够在 STL 容器中使用它。

4

2 回答 2

4

在您的特定情况下,将以下声明添加到Column

friend class std::deque<Column>;

一般来说,如果你想拥有这样的模式,你根本无法预先调整容器的大小,你需要一个一个地添加易于构建的对象。

但是,在支持此功能的容器(例如std::vector)上,您可以使用reserve后跟push_back.

于 2013-06-07T13:56:07.770 回答
0

制作一个std::deque<std::unique_ptr<Column>> columns_并让Table构造列并填充双端队列

例如

class Table 
{
public:
    Table()
        : columns_(10) 
    {};

    void addColumn()
    {
        columns.push_back(std::unique_ptr<Column>(new Column));
    };

private:
    std::deque<std::unique_ptr<Column>> columns_
}
于 2013-06-07T13:47:16.943 回答