2017-11-12 18 views
2

教育的な仕事がある:任意のstd::tupleと2つのインデックスを内部に持ち、対応するインデックスを持つstd::tupleの要素を含むstd::pairを返します。タプルをペアに変換する

例:このような何か書か

auto t = std::make_tuple(0, 3.5, "Hello"); 
std::pair<double, char const *> p = to_pair<1,2>(t); 
// p contains 3.5 and "Hello" 

template<int I, int J> 
auto to_pair(std::tuple t) -> decltype(std::make_pair(std::get<I>(t), std::get<J>(t))) { 
    return std::make_pair(std::get<I>(t), std::get<J>(t)); 
} 

ただしエラーを得た:

r: missing template arguments before ‘t’ 
auto to_pair(std::tuple t) -> decltype(std::make_pair(get<I>t, get<J>t)) 
         ^

私が間違ってやっていると、正しい構文は何である何ここに?ありがとう!

答えて

4

std::tupleはテンプレートクラスなので、std::tupleはありません。std::tuple<T, ...>のみです。あなたの場合、tのタイプはstd::tuple<int, double, char const *>です。

また、引数なしでstd::getを呼び出しています(中カッコがありません)。

あなたはほとんどそこにいる、関数はの線に沿って何かする必要があります:

template<int I, int J, class... T> 
auto to_pair(std::tuple<T...> t) 
    -> decltype(std::make_pair(std::get<I>(t), std::get<J>(t))) { 
    return std::make_pair(std::get<I>(t), std::get<J>(t)); 
} 
+0

'のstd ::タプル' - 非常に単純な感謝、これは動作します! –

関連する問題