矢量的 emplace_back - 矢量作为构造函数参数

Irb*_*bis 2 c++ c++17

我有以下结构:

struct A{};

struct B
{
    B(std::shared_ptr<A> a, int x): a_(a), x_(x){}

    std::shared_ptr<A> a_;
    int x_;
};

struct C
{
    C(std::vector<B> v, bool c){}
};
Run Code Online (Sandbox Code Playgroud)

我想将 C 类型的对象插入到向量中,但以下代码不起作用:

std::vector<C> vecC;
vecC.emplace_back({std::make_shared<A>(), 2}, false);
Run Code Online (Sandbox Code Playgroud)

或者,这种方式对以下内容没有意义emplace_back

vecC.emplace_back(B{std::make_shared<A>(), 2}, false);
Run Code Online (Sandbox Code Playgroud)

我应该如何将 C 类型的对象插入到向量中?

Ruk*_*uks 7

您忘记了另一副大括号std::vector。另外,您需要告诉emplace_back()它传递什么类型的参数,因此您需要调用 的std::vector构造函数:

vecC.emplace_back(std::vector{ B{ std::make_shared<A>(), 2 } }, false);
Run Code Online (Sandbox Code Playgroud)

或者,不要使用emplace_back()并使用push_back()

vecC.push_back({{{std::make_shared<A>(), 2}}, false});
Run Code Online (Sandbox Code Playgroud)