我正在尝试将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'
答案 0 :(得分:1)
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, …);
实时示例HERE。