在C++中将函数参数检索为元组

Kar*_*nek 7 c++ tuples function

考虑我有这样的函数声明:

void foo(int x, float y);

class X {
  void anotherFoo(double a, int c);
};
Run Code Online (Sandbox Code Playgroud)

如何获得与函数参数对应的元组?在上述情况下,它将是:

boost::tuple<int, float>
boost::tuple<X*, double, int>
Run Code Online (Sandbox Code Playgroud)

或者更好的结果类型为第0个元素:

boost::tuple<void, int, float>
boost::tuple<void, X*, double, int>
Run Code Online (Sandbox Code Playgroud)

我知道boost::function_types::parameter_types可以做到这一点.但是,我对如何实施的原则感兴趣.

Use*_*ess 10

你可以得到的元组类型对应你的说法的类型,就像这样:

template <typename R, typename... T>
std::tuple<T...> function_args(R (*)(T...))
{
    return std::tuple<T...>();
}

// get the tuple type
typedef decltype(function_args(foo)) FooArgType;
// create a default-initialised tuple
auto args = function_args(foo);
Run Code Online (Sandbox Code Playgroud)

那是你要的吗?请注意,您可能需要添加一个或多个重载function_args,例如.为类方法提取类类型参数.