zoukankan      html  css  js  c++  java
  • C语言复杂struct类型get或者set字段的简化方法

    今天学习librdkafka的conf配置相关的代码,学到了一个C语言代码编写的技巧。作者真的是把C语言用得出神入化。

    我们平时编写C语言代码,经常会用struct类型来模拟面向对象中的class。比如我实现了下面的Student结构体    

    可以看到零零碎碎有十多个字段。如果我们想再把这个struct模拟class模拟得像一点,那么get和set方法是没有办法避免的。要么对每个字段都实现一个get和一个set,要么写个函数,在函数内部写一大堆if..else。

    如果字段比较少,就像我上面的这个Struct一样,这种方式还可以接受。但是想想kafka数十上百个配置,这么干无疑会使得代码量膨胀,而且日后增加字段也不方便,一定会有很多相关函数要去跟着更改,增加维护成本。所以librdkakfa的作者使用了另外一种思路。看完下面的代码就会明白到底是怎么做的,没有一个get和set方法或者大量的if else,仅仅是提供了2个宏就把这个问题解决掉了。

    运行结果:

      假如Student_t中的每个字段是kafka中的一个配置项。kafka_conf的每个配置项都是一个property结构体,然后这些property结构体构成conf结构体。每个property结构体中保存了该property在conf结构体中的offset。这样就可以很方便地进行struct的get和set,而不用写大量的代码。而且如果日后增加property,也没有大量的函数要跟着改,降低了维护难度。

  • 相关阅读:
    sweetalert 1.0多次回调函数bug
    ThinkPHP添加扩展配置失败
    记一次相机内存卡数据恢复
    流量监控脚本监控网卡
    ip网关配置
    centos7【防火墙】常用规则-docker服务防火墙规则
    ssh服务及安全配置
    代码库
    linux计划任务防暴力破解脚本+免密操作
    阿里去短信接口包
  • 原文地址:https://www.cnblogs.com/MyOnlyBook/p/9827746.html
Copyright © 2011-2022 走看看