Вопрос в том, как инициализировать B во втором примере?
Вы не можете инициализировать вектор следующим образом:
std::vector<int> v = { 1, 2, 3 }; // doesn't work
Вы можете сделать это
int data[] = { 1, 2, 3 };
std::vector<int> v( &data[0], &data[0]+sizeof(data)/sizeof(data[0]));
(есть более хорошие способы сделать это). Это не "одна строка", хотя.
Это работает, и я проверил это:
template< typename T >
struct vector_builder
{
mutable std::vector<T> v;
operator std::vector<T>() const { return v; }
};
template< typename T, typename U >
vector_builder<T>& operator,(vector_builder<T>& vb, U const & u )
{
vb.v.push_back( u );
return vb;
}
struct B
{
vector<double> v;
};
B b = { (vector_builder(),1.1,2.2,3.3,4.4) };
C c = { {1.1, 2.2 }, {(vector_builder(),1.1,2.2,3.3,4.4)} };