I have the following structs:
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){}
};
I would like to insert an object of type C to the vector but the following code doesn't work:
std::vector<C> vecC;
vecC.emplace_back({std::make_shared<A>(), 2}, false);
Alternatively this way doesn't make sense with emplace_back
:
vecC.emplace_back(B{std::make_shared<A>(), 2}, false);
How should I insert an object of type C to the vector ?
CodePudding user response:
You forgot another pair of braces for the std::vector
. Also, you need to tell emplace_back()
what kind of arguments you pass it, so you need to invoke std::vector
's constructor:
vecC.emplace_back(std::vector{ B{ std::make_shared<A>(), 2 } }, false);
Alternatively, don't use emplace_back()
and use push_back()
instead:
vecC.push_back({{{std::make_shared<A>(), 2}}, false});