2016-12-12 15 views
2

はこれを行う方法:配列をstd :: make_tupleに渡すには?

#include <tuple> 

std::tuple<double, int[2]> f() 
{ 
    return std::make_tuple(0., {1, 2}); 
} 

int main() 
{ 
    f(); 
    return 0; 
} 

'のstd :: make_tuple < {}>()' 'のstd ::タプル<>' から

'のstd ::タプル' に変換できませんでした

コンパイラは何をすべきか把握できませんか?

答えて

1

私はそれができないと思います。代わりに、このInitializing std::tuple from initializer list

を読む、あなたはこのようなベクトルに合格することを選択することがあります。「コンパイル時のベクトル」を使用するためにあなたに必要な必要がある場合は、arrayを試してみてください

std::tuple<double, vector<int>> t = std::make_tuple(0.0, vector<int>{1,3}); 
+1

に変換 ある最もN初期化子で与え 集約初期設定で初期化することができる;'、その* "INTポインタ"*はもはや有効ではありません。 –

+0

ok thanks.corrected。 –

+0

@Piotr Skotnicki、その "int pointer"の例では、 'sizeof'で' int [2] 'がタプル内のポンターに崩壊しないことを検証しました。とにかく、実用的なアプリケーションのために、私は 'using MyTuple = std :: tuple を使います。 ... return MyTuple(0、{1、2}); '。 – Velkan

4

。集合型として

#include <array> 
// ... 

std::tuple<double, std::array<int, 2>> f() { 
    return std::make_tuple(0., std::array<int, 2>{1, 2}); 
} 

、それはT.

`後
関連する問題