簡體   English   中英

具有STL容器雙端隊列的私有構造函數

[英]private constructor with STL container deque

我有一個使用std :: deque的類Table

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

我希望只有class Table可以初始化class列,所以我做下面的事情

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

在編譯期間,STL容器抱怨Columns類的構造函數是private,據我了解,但是還有另一種方法來確保只有Class Table可以初始化Column類,並且仍然可以在STL容器內使用它。

在您的特定情況下,將以下聲明添加到Column就足夠了:

friend class std::deque<Column>;

通常,如果要使用這種模式,就無法預先調整容器的大小,則需要一個一個地添加容易構造的對象。

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

創建一個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_
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM