このタプルタイプがある場合:
std::tuple<int, string, std::tuple<...>, int>
どうすればそれを横断できますか?フラットなタプルをトラバースする関数を書くことはできましたが、ネストされたタプルではできませんでした。
問題は、ネストされたタプルで考えられるすべての型を処理するテンプレート化された関数または型の実装にあるようです。次の場合が必要です。
template<typename T>
void somefunc(T t)
{
// Do something to t
}
これは、すべてのタイプのオーバーロード解決に最適な選択であり、タプルであるという情報が失われるため、タプルを再帰的に走査することはできません。タプルかどうかを判断しようとするクラスまたは関数を作成しようとすると、上記と同じ問題を持つ「偽」のケースに遭遇します。バージョンが見落とされます。
何かがタプルかどうかを確認するために私が知らない方法はありますか?