Variadic模板,获取函数参数值

Gui*_*lem 2 c++ variadic-functions variadic-templates c++11

我的问题如下:我有一个声明为这样的类:

template<typename ReturnType, typename... Args>
class API
{
    ReturnType operator()(Args... args)
    {
       // Get argument 0
       // Get argument 1
    }
};
Run Code Online (Sandbox Code Playgroud)

我需要通过一个来获取参数,到目前为止我唯一的方法(但我无法让它工作)正在使用std::get,如下:

std::get<0>(args);
Run Code Online (Sandbox Code Playgroud)

当然,这会导致很多错误.我是variadic模板的新手(根本不是C++ 11),所以我在这一点上很失落.

我怎么能逐一得到这些论点?任何帮助将不胜感激.

Cas*_*sey 6

在临时元组中捕获args(Live in Coliru):

ReturnType operator()(Args... args)
{
   static_assert(sizeof...(args) >= 3, "Uh-oh, too few args.");
   // Capture args in a tuple
   auto&& t = std::forward_as_tuple(args...);
   // Get argument 0
   std::cout << std::get<0>(t) << '\n';
   // Get argument 1
   std::cout << std::get<1>(t) << '\n';
   // Get argument 2
   std::cout << std::get<2>(t) << '\n';
}
Run Code Online (Sandbox Code Playgroud)

std::forward_as_tuple使用完美转发来捕获对引用的引用args,因此不应该进行复制.