文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++如何实现泛型装饰器

2023-06-25 15:43

关注

小编给大家分享一下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<decltype(hargs)>(hargs)...);        return [f = std::move(tail)](auto &&...args) {            return f(forward<decltype(args)>(args)...);        };    };    auto nameWithAge = withDecorator(Object, Age, ObjectField("nic"));    auto withDecoratorWithSex = withDecorator(nameWithAge, sex, AgeField(18));    withDecoratorWithSex(SexField("man"));}int main() {    DecoratorTest();}

输出

C++如何实现泛型装饰器

对输出的解释

左值:表示传参的过程中调用了拷贝构造函数

右值:表示在传参过程中调用的是 移动构造函数

以上是“C++如何实现泛型装饰器”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯