假设要利用模板元编程获取位于index的参数的类型:
template<int index, class FuntionType>
struct ArgTypeAt
{
// FuntionType的返回值类型和参数类型?
};
int f(int, short, float);
static_assert(is_same_v<decltype(f), int(int, short, float)>);
using Arg2Type = ArgTypeAt<2, decltype(f)>::type; // 假设这样使用模板
这时FunctionType
就是一个单独的类型int(int, short, float)
了,里面含有各参数的类型。要把FuntionType
分离成返回值类型和参数类型,方法是利用模板特化,然后参数类型是一个包,再把参数包展开就能得到各位置参数的类型:
template<int index, class FuntionType>
struct ArgTypeAt;