日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 芯聞號 > 充電吧
[導讀]假設有這樣一個需求:一個項目需要250個函數,但這些函數體內容完全相同,僅函數名不同,例如Func0、Func1、Func2...等等,這樣的要求怎么實現呢?(先不要問有沒有如此變態(tài)的需求)當然可以使

假設有這樣一個需求:一個項目需要250個函數,但這些函數體內容完全相同,僅函數名不同,例如Func0、Func1、Func2...等等,這樣的要求怎么實現呢?(先不要問有沒有如此變態(tài)的需求)


當然可以使用手工先寫Func0函數體,再寫Func1函數體,....,一直寫到函數體Func250。假設寫完了后,項目需求有變,函數體內有變化,還要從頭開始一個一個改.....!??!


如何使用宏函數實現這個需求?(先寫3個吧)



//這里是宏函數定義
//	這種函數定義基本覆蓋了所有的函數類型,
//	有參數,有返回值
#define?FUNC(n)		
int?Func##n(int?a,?int?b)
{
	return?a+b;
}


//這里開始“實現”每一個函數體
//	將產生函數名為Func0、Func1、Func2的函數體
FUNC(0)
FUNC(1)
FUNC(2)
//FUNC(3)
//FUNC(n)
//自己往下接著寫吧.....


//再加深一步,使用函數指針數組引用這些函數
//	因為已經定義了幾個函數名,反正使用時一定是函數指針數組訪問
int?(*fnFunc[2])(int,?int)?=?
{
	Func0,
	Func1,
	Func2,
//	Func3,
}


//主函數
void?main()
{
	//①?訪問方式1
	int?x?=?Func0(24,?15);

	//②?訪問方式2
	for?(int?i=0;?i<3;?i++)
	{
		int?y?=?fnFunc[i](12,?88);
	}
}


使用VC編譯該程序,成功編譯后,可以查看宏展開文件。方法是:在【項目】--【設置】--【C++】底下的選項中添加“/P”(大寫),編譯時可以得到一個.i的宏展開文件:



int?Func0(int?a,?int?b){?return?a+b;}
int?Func1(int?a,?int?b){?return?a+b;}
int?Func2(int?a,?int?b){?return?a+b;}

int?(*fnFunc[2])(int,?int)?=?
{
	Func0,
	Func1,
	Func2,

}


void?main()
{
	int?x?=?Func0(24,?15);
	
	for?(int?i=0;?i<3;?i++)
	{
		int?y?=?fnFunc[i](12,?88);
	}
}




這樣的使用需求會碰到的:一個項目創(chuàng)建了N個線程,每個線程訪問相同的一個回調函數,并傳遞進入相同的參數,但是這個回調函數不能只寫一個,應該是一個線程對應一個回調函數,就是這樣一個問題。





本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關閉