键入表示函数参数的元组的表达式

时间:2016-01-10 16:24:53

标签: c++ c++11 variadic-templates

我正在寻找一种方法来为std :: tuple创建一个表达式,表示函数所需的参数。请考虑以下事项:

template<typename F, typename ...args>
void myfunction(F&& function, A... args)
{
    std::tuple</*???*/> arguments;
    populate_tuple(arguments,args...);
    return apply(function,arguments);
}

...其中F是普通函数类型,apply()是一个将参数应用于函数的函数,populate_tuple()在填充元组之前对参数(包括类型转换)执行一些操作调用函数的参数。

注意:我无法在元组声明中使用args...,因为这些不是函数所期望的类型 - populate_tuple()执行转换。

对我来说,好像编译器具有完成此操作所需的一切,但我不知道该语言是否支持它。有任何想法吗?所有帮助赞赏。

2 个答案:

答案 0 :(得分:1)

这些方面的一些东西,也许是:

template <typename T> struct TupleOfArguments;

template <typename R, typename ... Args>
struct TupleOfArguments<R(Args...)> {
  typedef std::tuple<Args...> type;
};

Demo

答案 1 :(得分:0)

这有用吗?

template<typename F, typename ...Args>
void myfunction(F&& function, Args&&... args) {
     return apply(std::forward<F>(function), std::make_tuple(std::forward<Args>(args)...));
}