我的问题如下: 我有一个这样声明的类:
template<typename ReturnType, typename... Args>
class API
{
ReturnType operator()(Args... args)
{
// Get argument 0
// Get argument 1
}
};
我需要一个一个地获取参数,到目前为止我想出的唯一方法(但我无法让它工作)是使用 std::get
,因此:
std::get<0>(args);
当然,这会导致很多错误。 我是可变参数模板(以及 C++11 的新手)所以在这一点上我很迷茫。
我怎样才能一个一个地得到这些参数? 任何帮助将不胜感激。
最佳答案
在临时元组 (Live at 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';
}
std::forward_as_tuple
使用完美转发来捕获对 args
的引用,因此不应该有复制。
关于c++ - 可变参数模板,获取函数参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21565578/