1. 程式人生 > >C語言復雜struct類型get或者set字段的簡化方法

C語言復雜struct類型get或者set字段的簡化方法

難度 很多 今天 class 作者 prop 簡化 http if else

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

C語言復雜struct類型get或者set字段的簡化方法