c – 将“传递”函数模板作为generic-variadic lambda return语
发布时间:2020-12-16 10:04:12 所属栏目:百科 来源:网络整理
导读:尝试将函数模板作为模板模板参数传递时,我很开心.当然C不允许以这种方式传递函数模板.但我想出了简单的hax: #include iostream#define PASS_TEMPLATE(name) [](auto... args){return name(args...);}template typename T,typename Svoid function_template(
尝试将函数模板作为模板模板参数传递时,我很开心.当然C不允许以这种方式传递函数模板.但我想出了简单的hax:
#include <iostream> #define PASS_TEMPLATE(name) [](auto&... args){return name(args...);} template <typename T,typename S> void function_template(T t,S s) {std::cout << t << ' ' << s << std::endl;} template <typename Hax,typename T,typename S> auto test(Hax hax,T t,S s) { return hax(t,s); } int main() { test(PASS_TEMPLATE(function_template),1,1.5); } Demo 问题是: >这是可行的方法吗? (它是否安全?没有角落案件?) 我只是在GCC 6.1.0上进行测试(我真的希望它不是GCC扩展或其他东西) 解决方法
我建议使用完美转发,但除此之外,它是完全可行的(并且可能除了手动输入之外唯一的除外)解决问题的方法.
那么,那将是: #define PASS_TEMPLATE(name) [](auto&&... args){return name(decltype(args)(args)...);} GCC was broken with generic stateless lambdas,所以你必须添加至少最小的状态,如[dummy = nullptr]或类似的东西.幸运的是他们修好了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- postgresql数据库创建、修改、删除
- c – std :: vector的第二个参数
- xml – JAXB:如何编组列表中的对象?
- swift – “Collection where Indices.Iterator.Element ==
- c# – 为什么在DataContext上调用Dispose()之后可以枚举DbL
- 如何检测PostgreSQL sum()中的NULL行
- C,C+和C++它们有什么区别
- Cocos2d-x vector使用遇到问题。
- c# – webrequest和httpwebrequest之间有什么区别?
- React Native未来导航者:react-navigation 使用详解