C++代码片断(四)萃取模板类的模板参数类型

例若有类型ios

Test<int, double, std::string>

能够萃取出模板参数分别是c++

int, double, std::string

方法以下web

#include <tuple>
#include <iostream>

template <typename...>
struct template_argument_type_traits {};

// 由于ClassType是一个模板类,因此用模板的模板参数表示它,即
// template <typename...> class ClassType 表示ClassType是一个模板类
// 这样才能够在特化的时候为它添加模板参数Args...
template <template <typename...> class ClassType, typename... Args>
struct template_argument_type_traits<ClassType<Args...>>
{
    template <std::size_t N>
    using param_type = std::tuple_element_t<N, std::tuple<Args...>>;
};