2
これは明白なはずですが、サブプレットを得るための短い構文がありますか?そのようなタプルから複数の型を抽出する
何か:
std::tuple<std::string, double, int> myTuple;
std::tuple<std::string, int> subTuple = std::get<std::string, int>(myTuple);
これは明白なはずですが、サブプレットを得るための短い構文がありますか?そのようなタプルから複数の型を抽出する
何か:
std::tuple<std::string, double, int> myTuple;
std::tuple<std::string, int> subTuple = std::get<std::string, int>(myTuple);
あなたはこの実装の下に、独自のテンプレート関数を作成する必要がありますが(それがstd::get<T>
を必要とするため、あなたがC++ 11自分でそれを実装することができます)C++ 14が必要です。
template<typename... R, typename ...Args>
std::tuple<R...> sub_tuple(const std::tuple<Args...>& original) {
return std::make_tuple(std::get<R>(original)...);
}
int main()
{
std::tuple<std::string, double, int> myTuple = std::make_tuple("Hello", 1201.0, 51);
std::tuple<std::string, int> subTuple = sub_tuple<std::string, int>(myTuple);
std::cout << std::get<0>(subTuple) << " " << std::get<1>(subTuple);
}
注:これは、元のタプルの各要素のコピーを作成します
あなたが使用できるstd::tie
(reference):
2つの取得で何が問題なのですか?メタテンプレートのトリッキーでもっと一般化できると確信していますが、その価値はありますか? – rubenvb
@rubenvb、私はstdライブラリがそれを持っていると思った。 – Velkan