タプル型があり、別のテンプレートをインスタンス化するためにそのテンプレート パラメーター パックを抽出したいとします。それがタイプ テンプレートの場合、次のようなユーティリティを使用できます。
template < typename Tuple, template <typename...> typename What >
struct PutTupleInT;
template < typename... Types, template <typename...> typename What >
struct PutTupleInT<std::tuple<Types...>, What>
{
using Result = What<Types...>;
};
しかし、目的のテンプレートが可変テンプレートの場合はどうなるでしょうか? はtemplate <typename...> typename What
型テンプレートの「プレースホルダー」ですが、変数テンプレートの「プレースホルダー」とは何ですか?
私は clang-4.0.0 (auto 型の非型テンプレート パラメーターをサポートする唯一のコンパイラ) に対して次のことを試しましたが、失敗しました。実際、これが C++17 の正しい構文かどうかはわかりません。
template < typename Tuple, template <typename...> auto What >
struct PutTupleInV;
template < typename... Types, template <typename...> auto What >
struct PutTupleInV<std::tuple<Types...>, What>
{
static constexpr auto value = What<Types...>;
};