C++如何实现泛型装饰器
发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,小编给大家分享一下C++如何实现泛型装饰器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!c++ 装饰器简单写了个 c++
千家信息网最后更新 2025年02月22日C++如何实现泛型装饰器对输出的解释
小编给大家分享一下C++如何实现泛型装饰器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
c++ 装饰器
简单写了个 c++ 装饰器,主要使用的是c++ lamda 表达式,结合完美转发技巧,在一定程度上提升性能
#define FieldSetter(name, type, field) \ type field; \ name() {} \ name(const type& field): field(field) { \ cout << "[左值 " << field << "]" << endl; \ } \ name(const type&& field) : field(move(field)){ \ cout << "[右值 " << field << "]" << endl; \ } \ name(const name& other) { \ field = other.field; \ cout << "[左值 " << other.field << "]" << endl; \ } \ name(const name&& other) { \ field = move(other.field); \ cout << "[右值 " << other.field << "]" << endl; \ }struct ObjectField { FieldSetter(ObjectField, string, name);};struct AgeField { FieldSetter(AgeField, int, age);};struct SexField { FieldSetter(SexField, string, sex);};void DecoratorTest() { auto Object = [](auto ob) { cout << ob.name << endl; }; auto Age = [](auto age) { cout << age.age << endl; }; auto sex = [](auto sex) { cout << sex.sex << endl; }; auto withDecorator = [](auto &&head, auto &&tail, auto &&...hargs) { head(forward(hargs)...); return [f = std::move(tail)](auto &&...args) { return f(forward (args)...); }; }; auto nameWithAge = withDecorator(Object, Age, ObjectField("nic")); auto withDecoratorWithSex = withDecorator(nameWithAge, sex, AgeField(18)); withDecoratorWithSex(SexField("man"));}int main() { DecoratorTest();}
输出
对输出的解释
左值:表示传参的过程中调用了拷贝构造函数
右值:表示在传参过程中调用的是 移动构造函数
以上是"C++如何实现泛型装饰器"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
篇文章
c++
C++
内容
函数
过程
输出
不怎么
大部分
性能
技巧
拷贝
更多
知识
程度
行业
表达式
资讯
资讯频道
频道
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
令牌软件开发
服务管理软件开发价格
绝对演绎服务器爆满
当前网络安全面临的主要威胁
英语发音软件开发
金科网络技术
浪潮服务器管理系统登录
数据库sa一直被锁定
吴江区创新软件开发流程
数据库可以降低数据冗余吗
软件开发中存在哪些风险
零基础数据库教程013期
怎样加强网络安全防范措施
开传奇用什么服务器
怀柔区软件开发范围
英语四六级报名显示服务器繁忙
mojang服务器
没有备案服务器
网络安全行书签怎么制作
数据库中表格属性
dellr630服务器质量
网络技术与python
武汉软件开发有哪几家
软件开发的成本与质量的关系
专注网络安全可视化
怎么删除数据库表的属性
星际迷航孢子网络技术
上海创新金融网络技术服务热线
余干服务器
软件开发中标后授权