簡體   English   中英

C++ 如何將 emplace_back 用於用戶定義的結構

[英]C++ how to use emplace_back for user defined structure

我正在嘗試將 emplace_back 用於我的用戶定義結構:

#include <cstdint>
#include <vector>
#include <string>

struct IDNumber
{
    IDNumber(std::vector<int> d) : id(d){}
    std::vector<int> id;
};
struct Def
{
    Def(std::initializer_list<int> id) : mid(id){}
    IDNumber mid;
};

struct Student
{
    std::vector<Def> ent;
};

int main()

{
 Student a;
 a.ent.emplace_back({ {2000} });
}

我得到編譯問題:

error: no matching function for call to 'std::vector<EntryDef>::emplace_back'

@PiotrSkotnicki評論

emplace_back是函數模板,它試圖推斷參數的類型。 初始值設定項列表沒有類型,因此推導失敗。

澄清問題。

“修復”此問題的另一種方法是傳遞所需類型的右值作為構造函數的參數,而不是初始化列表:

EntryDef(ID &&id, FType ft, … ) : mid(std::forward<ID>(id)), ftype(ft), … {}

稱為:

Def a;
a.ent.emplace_back(ID{ 2, 1 }, FType::FD_NONE, …);

現場示例在這里

暫無
暫無

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

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