用参数向量调用函数的C ++模板

时间:2013-12-11 01:31:03

标签: c++ templates metaprogramming

我目前正致力于为功能制作基准测试工具,让我可以将多个功能的平均运行时间与同一原型进行比较。这主要是学习模板元编程的学术练习。

所以这就是问题所在。我正在尝试创建一个模板函数,它允许我调用另一个作为参数传入的函数,使用从传入的向量中转换为适当类型的值。

我知道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...);
}

1 个答案:

答案 0 :(得分:1)

添加template关键字似乎对我有用。

typedef typename function_traits<Func>::template arg<position>::type argtype;

有关详细信息,请参阅此question