考虑带有可变模板参数的模板化函数的情况:
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/