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,也沒有大量的函數要跟着改,降低了維護難度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM