c++ - 如何将元组扩展为可变参数模板函数的参数?

标签 c++ c++11 arguments tuples

考虑带有可变模板参数的模板化函数的情况:

template<typename Tret, typename... T> Tret func(const T&... t);

现在,我有一个值的元组 t。如何使用元组值作为参数调用 func()? 我已经阅读了关于 bind() 函数对象、call() 函数以及现在不同的 apply() 函数的内容- 过时的文件。 GNU GCC 4.4 的实现似乎在 bind() 类中有一个 call() 函数,但是关于这个主题的文档很少。

有些人建议使用手写递归技巧,但可变参数模板参数的真正值(value)在于能够在上述情况下使用它们。

有没有人有解决方案,或者提示在哪里阅读它?

最佳答案

在 C++17 中,您可以这样做:

std::apply(the_function, the_tuple);

这已经在 Clang++ 3.9 中工作,使用 std::experimental::apply。

回复说如果 the_function 被模板化,这将不起作用的评论,以下是一种解决方法:

#include <tuple>

template <typename T, typename U> void my_func(T &&t, U &&u) {}

int main(int argc, char *argv[argc]) {

  std::tuple<int, float> my_tuple;

  std::apply([](auto &&... args) { my_func(args...); }, my_tuple);

  return 0;
}

这个变通方法是对在期望函数的地方传递重载集和函数模板的一般问题的简化解决方案。此处介绍了通用解决方案(处理完美转发、constexpr-ness 和 noexcept-ness):https://blog.tartanllama.xyz/passing-overload-sets/ .

关于c++ - 如何将元组扩展为可变参数模板函数的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/687490/

相关文章:

c++ - 如何创建仅针对特定模板特化存在的函数

python - 从 c++ 中的 python 程序中检索 stderr

c++ - 如何检查用户输入的内容是否不包含小数?

php - 方法/函数中需要 2 个参数之一(两个参数之一可选)

c++ - 使用模板函数传递模板参数时出错

c++ - 检查文本文件中的多条评论并打印出来

c++ - 在 opengl 矩形上使用着色器会导致它消失

c++ - 检查函数的特征接受某些参数但不返回类型

c++ - C++ 标准工作草案之间的变化?

JavaScript 实例 : can't define what instance of function's argument is