對應(yīng)于面向?qū)ο笳Z言的構(gòu)造函數(shù)注入,ssc網(wǎng)站架設(shè)【企鵝21717-93408】C語言作為過程語言,參數(shù)注入法是最簡單、也是最直接的方法。最常見的排序方法qsort就是用這種方法:
創(chuàng)新互聯(lián)建站是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、微信小程序、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動互聯(lián)開發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立十多年以來,已經(jīng)為上千家白烏魚各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的上千家客戶與我們一路同行,見證我們的成長;未來,我們一起分享成功的喜悅。
void qsort(void base, size_t num, size_t size, int (compar)(const void,const void));
可以看到qsort函數(shù)的第四個參數(shù)compar就是外部依賴的對象(函數(shù)),因為不同場景有不同的比較元素大小的方式,通過參數(shù)將外部依賴注入,使該函數(shù)更加具有通用型,因為實際上我們用qsort,只是用他的排序算法,其他的都是和具體使用場景有關(guān)。
設(shè)置(set)接口注入
上一篇我們介紹的設(shè)置回調(diào)函數(shù)的方法其實就是使用這種方法,其本質(zhì)就是專門對外提供一個接口,用來將依賴的外部對象或者函數(shù)注入到本模塊中來。比如開發(fā)一個模塊,需要申請內(nèi)存,但是為了易用性,除了使用系統(tǒng)自帶的內(nèi)存申請函數(shù),我們需要支持第三方的內(nèi)存池模塊來申請內(nèi)存,我們就可以提供一個API來設(shè)置申請和釋放內(nèi)存的函數(shù),如下示例:
///默認(rèn)申請內(nèi)存方式為系統(tǒng)自帶的函數(shù)
static void (malloc_function)(size_t size) = malloc;
static void (free_function)(void p) = free;
int sample_module_init()
{
return 0;
}
///設(shè)置新的分配內(nèi)存的函數(shù)
int sample_module_set_memory_api(void (get)(size_t size), void(put)(void p))
{
malloc_function = get;
free_function = put;
return 0;
}
///申請一個size大小的int類型數(shù)組
int sample_module_create_int_array(size_t size)
{
int p = (int )malloc_function(sizeof(int) * size);
return p;
}