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

posted @ 2018-10-22 00:09  Frogjie  阅读(2311)  评论(0编辑  收藏  举报