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

vector's emplace_back - vector as a constructor argument

我有以下结构:

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){}
};

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

std::vector<C> vecC;
vecC.emplace_back({std::make_shared<A>(), 2}, false);

或者这种方式对 emplace_back 没有意义:

vecC.emplace_back(B{std::make_shared<A>(), 2}, false);

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

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

vecC.emplace_back(std::vector{ B{ std::make_shared<A>(), 2 } }, false);

或者,不要使用 emplace_back() 而是使用 push_back()

vecC.push_back({{{std::make_shared<A>(), 2}}, false});