我目前正致力于为功能制作基准测试工具,让我可以将多个功能的平均运行时间与同一原型进行比较。这主要是学习模板元编程的学术练习。
所以这就是问题所在。我正在尝试创建一个模板函数,它允许我调用另一个作为参数传入的函数,使用从传入的向量中转换为适当类型的值。
我知道run
函数需要position = 0的特化,以便递归停止并调用函数。但是,当我尝试提取告诉我的参数类型
错误:非模板'arg'用作模板
然而,它明确定义为模板。
此外,我正在使用here中的代码来表示功能特性。
template<typename Args>
struct function_traits;
template<typename R, typename ...Args>
struct function_traits< R(*)(Args... ) >
{
static const size_t nargs = sizeof...(Args);
typedef R result_type;
template <size_t i>
class arg
{
typedef typename std::tuple_element<i, std::tuple<Args...>>::type type;
};
};
struct Argument
{
char * data;
int size;
};
template<size_t position,typename Func,typename... arguments>
function_traits<Func>::result_type run(vector<Argument> arglist,
Func f,
arguments... args)
{
//compile error on this statement.
typedef typename function_traits<Func>::arg<position>::type argtype;
return process<position-1>(arglist,f,(argtype)(*arglist[position].data) ,args...);
}
答案 0 :(得分:1)
添加template
关键字似乎对我有用。
typedef typename function_traits<Func>::template arg<position>::type argtype;
有关详细信息,请参阅此question。