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,也没有大量的函数要跟着改,降低了维护难度。

  • 相关阅读:
    MVC中使用AuthorizeAttribute做身份验证操作
    MVC Dynamic Authorization--示例市在Action前进行的验证,应提前到Auth过滤器
    forms
    UEditor
    Test log4net
    log4net.config
    [转]log4net使用(WinForm/WebFrom)
    如何指定模型的显示格式和模板
    64位系统中连接Access数据库文件的一个问题
    VS2008简体中文正式版序列号
  • 原文地址:https://www.cnblogs.com/MyOnlyBook/p/9827746.html
Copyright © 2011-2022 走看看