torcy7中的THTenser_(random)(a ,b)是怎么回事
pytorch是非常流行的人工智能訓(xùn)練框架。它的起點是C寫的軟件包torch.
我找到了一份torch的源碼:torch7.
在嘗試運行它的過程中,發(fā)現(xiàn)了函數(shù)的如下定義方式:
產(chǎn)生隨機數(shù)的函數(shù),一般來說我們這樣定義:
注意到,函數(shù)必須只能有一個小括號().這是C編譯器要求的。不這樣就會語法錯誤。
問題來了。
為什么這里可以這樣寫呢?難道C語言允許寫兩個括號了?
其實不是的,這里只是使用了宏定義#define
在源碼中,對THTensor_(NAME)使用了如下宏定義:
然后又對TH_CONCAT_4進(jìn)行了如下宏定義:
然后又對TH_CONCAT_4_EXPAND進(jìn)行了如下宏定義:
而x ## y ## z ## w的意思是生成形如x_y_z_x這樣的字符串。
連起來就是:
所以,ThTensor_(random)(THTensor *self, THGenerator * _generator);實際上定義了這樣一個函數(shù):
THRealTensor_random(THTensor *self,THGenerator *_generator)
那么為什么要使用宏這樣定義呢?這不是增加了代碼閱讀難度么?
因為作者想隨時批量的修改函數(shù)名字,但又不想逐個去修改,不僅慢,還容易出錯。
這樣宏定義后,只用修改一處,就能達(dá)到修改所有地方。
標(biāo)簽: