36478


お世話になります。  
functionとvectorと範囲ベースforループを使ったコードを書こうと思っていたのですが、エラーが解決しません。以下簡潔にしたコードです。

[code]

    enum eTEST {
     a = 0,
     b
    };
    
    int main()
    {
       struct testList
       {
         eTEST para;
         std::function<int> func;
       };
       std::vector<testList> list
       {
         { a, [&]() {return 1; } },
         { b, [&]() {return 2; } }
       };
    
       for (auto para : list)
       {
         std::cout << para.func() << std::endl;
       }
    
       return 0;
    }
    
[/code]

vector と function の使い方が両方正しくないようで、  
vector では `コンストラクター "std::vector<_Ty, _Alloc>::vector [代入_Ty=testList,
_Alloc=std::allocator<testList>]" のインスタンスが引数リストと一致しません` というエラーが出ており、function
でもいろいろエラーが出ています。  
複数エラーが出てしまっているので、エラー一覧を画像で添付します。  
どこか使い方を勘違いしているだけだとは思うのですが、しばらく調べても解決しなかったのでこちらで質問させていただきます。よろしくお願いします。

[![エラー一覧](https://i.stack.imgur.com/RFaSj.png)](https://i.stack.imgur.com/RFaSj.png)

検索用に文字列でも書いておきます。

[code]

    * E0289: コンストラクター "std::vector<_Ty, _Alloc>::vector [代入_Ty=testList, _Alloc=std::allocator<testList>]" のインスタンスが引数リストと一致しません
    * E0980: pointer-to-function 型に対する適切な operator() または変換関数のないクラス型のオブジェクトの呼び出しです
    * C2027: 認識できない型 'std::_Get_function_impl<_Fty>' が使われています。
    * C2504: 'type': 定義されていない基底クラスが宣言されています。
    * C2027: 認識できない型 'std::_Get_function_impl<_Fty>' が使われています。
    * C3646: '_Mybase': 不明なオーバーライド指定子です
    * C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を規定値としてサポートしていません
    * C2440: '初期化中': 'initializer list' から 'std::vector<main::testList,std::allocator<_Ty> >' に変換できません。
    * C2064: 0 引数を取り込む関数には評価されません。
    
[/code]


CC BY-SA 3.0
2017-07-18T14:54:52.183
36474
2017-07-25T13:17:19.170
2017-07-25T13:17:19.170
68
24103
question
c++ c++11
C++ function/vector/for文を使ったループについて


クラステンプレート `std::function` に渡す型パラメータが正しくありません。返り値の型だけではなく引数の型も指定する必要があります。

今回の場合、返り値が `int` 型の、引数を取らない関数を表したいので

[code]

    std::function<int(void)> func;
    
[/code]

としてください。

サンプルコードを [Wandbox
上で実行できるようにしました。](https://wandbox.org/permlink/utpHdzlDq9gSmnBv)


CC BY-SA 3.0
2017-07-18T16:20:54.663
36478
2017-07-18T16:20:54.663
19110
36474
answer