将元组扩展为可变参数模板函数参数
在 C 17 及更高版本中,std::apply 函数提供这个问题的一个简单的解决方案。它接受一个可调用对象和一个元组作为参数,本质上将元组扩展为函数的单独参数:
#include <tuple> template<typename Tret, typename... T> Tret func(const T&... t); int main() { std::tuple<int, float> my_tuple; auto result = std::apply(func<int, int, float>, my_tuple); return 0; }
在 Clang 版本 3.9 及以上版本中,std::experimental::apply可用于类似的功能。
处理模板函数参数
如果模板函数采用可变参数模板参数,可以采用一种解决方法:
#include <tuple> template<typename T> void my_func(T&& t) {} 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中文网其他相关文章!