[英]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'
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.