我试图T
从 type 推断出基础模板类型E = T<T2,T3>
。例如,这可以使模板函数 pair_maker(const E & a) 可以与几种类似类型的容器之一一起使用。粗略的元代码:
template <typename T>
auto pairmaker(const E & a) -> PairContents<E,std::string>::type {
ContainerPairMaker<E,std::string>::type output;
... some code ...
return output;
}
PairContents<E,std::string>
会将类型vector<int>
转换为vector<pair(int,std::string)>
或。whatever<T1>
whatever<pair(T1,std::string)>
类型剖析的另一个类似示例是 std::array (或类似容器),我想找出容器类型以创建一个新的类似数组。例如对于这些类型的功能(这是现在实际的工作代码)
template <typename T >
auto make_some3(const T & a)
-> std::array<typename T::value_type,10*std::tuple_size<T>::value>{
return std::array<typename T::value_type,10*std::tuple_size<T>::value>{} ;
}
这很好用,但我想要的是自动显式使用“std::array”。
对于 std::array 有 tuple_size 特性会有所帮助,并且可以使用类似的东西来查找type
任何第二个参数,但我还是想不出任何东西来查找容器类型。
总结一下:什么样的机器(如果有的话)可以用于这样的情况。在何种程度上可以处理模板参数、模板-模板参数、任意数量的参数和未知类型的非模板参数的混合。