2016-11-20 4 views
2

Возможно ли инициализировать std::vector в одной строке с использованием лямбда-функций?Инициализировать std :: vector of std :: unique_ptr с lambdas

Я использую следующие псевдонимы:

using UI = std::unique_ptr<int>; 
using VUI = std::vector<UI>; 

До сих пор, я могу сделать следующее:

UI init[] = { UI(new int(0)), UI(new int(0)), UI(new int(0)) }; 
VUI vec { std::make_move_iterator(std::begin(init)), std::make_move_iterator(std::end(init)) }; 

VUI vec; 
for (unsigned i=0; i<3; ++i) 
    vec.emplace_back(UI(new int(0))); 

Я хотел бы сделать что-то подобное, но в одной строке, предпочтительно с использованием лямбда.

+1

Какова цель единственной строки, кроме обфускации читаемости вашего кода? –

+0

Вы можете написать каждую единую воображаемую конструкцию в одной строке (кроме нескольких директив макросов, вы можете иметь только одну директиву макроса на линии). – user2079303

ответ

5

Что-то вроде этого?

int main() 
{ 
    using UI = std::unique_ptr<int>; 
    using VUI = std::vector<UI>; 

    VUI vec{ []() 
      { 
       VUI v; 
       for (int i=0; i<3; ++i) 
        v.emplace_back(new int(0)); 
       return v; 
      }()}; 
} 

Но почему?

+0

Это ли целая линия, как просили? –

+3

@ πάνταῥεῖ: Это одно утверждение. Удалите символы новой строки, если вам станет лучше. –

+0

@LightnessRacesinOrbit Я не просил об этом от моего имени. –