C ++如何将emplace_back用于用户定义的结构

时间:2018-11-14 14:35:44

标签: c++ c++11

我正在尝试将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'

1 个答案:

答案 0 :(得分:1)

comment@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, …);

实时示例HERE