首页 >后端开发 >C++ >如何将值元组作为参数传递给 C 中的可变参数模板函数?

如何将值元组作为参数传递给 C 中的可变参数模板函数?

Patricia Arquette
Patricia Arquette原创
2025-01-02 22:07:40583浏览

How Can I Pass a Tuple of Values as Arguments to a Variadic Template Function in C  ?

从元组进行可变参数模板函数参数扩展

考虑一个带有可变参数模板参数的模板函数:

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

如何您可以使用值元组作为调用 func() 吗参数?

现代 C 解决方案(C 17 及更高版本)

在 C 17 中,std::apply() 函数提供了一个优雅的解决方案:

std::apply(the_function, the_tuple);

叮当 3.9解决方法

如果您使用的是 Clang 3.9,则可以改用 std::experimental::apply 函数。

处理模板化函数

如果 the_function 是模板化的,您可以使用以下内容解决方法:

#include <tuple>

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

int main() {

  std::tuple<int, float&> my_tuple;

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

  return 0;
}

通用重载集调用

有关可以处理重载集和函数模板的更通用的解决方案,请参阅 https:// /blog.tartanllama.xyz/passing-overload-sets/.

以上是如何将值元组作为参数传递给 C 中的可变参数模板函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn