ベクトルのタプルをタプルのベクトルに変更しようとしています (逆も同様です)。関数の呼び出しに問題がありtuple_transpose
ます。1 つの引数で呼び出すと、no matching function call
エラーが発生します。
prog.cpp: 関数 'int main()':
prog.cpp:44:24: エラー: 'tuple_transpose(std::tuple >, std::vector > >&)' への呼び出しに一致する関数がありません<br> prog.cpp:44:24: 注: 候補は:
prog.cpp:30:6: 注: テンプレート typename transpose::type tuple_transpose(std::tuple >...>&, seq)
prog.cpp:30: 6: 注: テンプレート引数の推定/代入に失敗しました:
prog.cpp:44:24: 注: 候補は 2 つの引数を予期し、1 つが提供され
ました prog.cpp:36:6: 注: テンプレートの typename 転置::タイプ tuple_transpose(std::tuple >...>&)
prog.cpp:36:6: 注意: テンプレート引数の控除/代入に失敗しました:
prog.cpp: 'template typename transpose::type tuple_transpose(std::tuple >...>& の代用) ) [with T = {int, bool}]':
prog.cpp:44:24: ここから必要
prog.cpp:36:6: エラー: 'type' という名前の型が 'struct transpose >, std::vector > >&>' にありません</sub>
#include <vector>
#include <tuple>
#include <type_traits>
template <typename... T>
struct transpose {};
template <typename... T>
struct transpose<std::tuple<std::vector<T>...>>
{
using type = std::vector<std::tuple<T...>>;
};
template <typename... T>
struct transpose<std::vector<std::tuple<T...>>>
{
using type = std::tuple<std::vector<T>...>;
};
// Indicies from Andy Prowl's answer
template <int... Is>
struct seq {};
template <int N, int... Is>
struct gen_seq : gen_seq<N - 1, N - 1, Is...> {};
template <int... Is>
struct gen_seq<0, Is...> : seq<Is...> {};
template <typename... T, int... Is>
auto tuple_transpose(std::tuple<std::vector<T>...>& var, seq<Is...>) -> typename transpose<decltype(var)>::type
{
return { std::make_tuple(std::get<Is>(var)...) };
}
template <typename... T>
auto tuple_transpose(std::tuple<std::vector<T>...>& var) -> typename transpose<decltype(var)>::type
{
return tuple_transpose(var, gen_seq<sizeof...(T)>{});
}
int main()
{
std::tuple<std::vector<int>, std::vector<bool>> var;
tuple_transpose(var); // error
...
}
エラーのあるデモを次に示します: http://ideone.com/7AWiQQ#view_edit_box
私は何を間違っていますか?どうすれば修正できますか? ありがとう。