2016-11-20 21 views
2

ラムダ関数を使用してstd::vectorを1行で初期化することはできますか? 、std :: vectorのstd :: unique_ptrをlambdaで初期化する

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

私はこのようなものの、単一の行に何かをしたいと思います:

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

はこれまでのところ、私は次の操作を行うことができています:

私は、次の別名を使用しています好ましくはラムダを使用する。

+1

コードの可読性を難読化する以外に、単一行の目的は何ですか? –

+0

想像できるすべての構文を1行に書くことができます(複数のマクロ指令を除いて、1行に1つのマクロ指令しか指定できません)。 – 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

それは_singleラインですか? –

+3

@πάνταῥεῖ:これはひとつの声明です。気分が良くなる場合は、改行文字を削除してください。 –

+0

@LightnessRacesinOrbit私は私のためにそれを求めなかった。 –

関連する問題