C++ 宏定義中的#和##的用法
- #
#的用法是負責將其後面的東西轉換爲字符串,比如
#define STRINGIFY(m) #m
#define AS_STRING(m) STRINGIFY(m)
int main()
{
std::cout << AS_STRING(this is a string)<<std::endl;
return 0;
}
- ##
##是連接符,將前後兩個東西鏈接成一個詞。
#define REGISTER_LAYER_CREATOR(type, creator) \
static LayerRegisterer<float> g_creator_f_##type(#type, creator<float>); \
static LayerRegisterer<double> g_creator_d_##type(#type, creator<double>); \
該宏代碼創建類對象
typedef的用法
1.給類型取別名
typedef std::map<string,Creator> CreatorRegistry;
2. 函數指針用法
// 形式1:返回類型(*函數名)(參數表)
// 形勢2:typedef 返回類型(*新類型)(參數表)
//定義一個函數指針pFUN,它指向一個返回類型爲char,有一個整型的參數的函數
char (*pFun)(int);
//定義一個返回類型爲char,參數爲int的函數
//從指針層面上理解該函數,即函數的函數名實際上是一個指針,
//該指針指向函數在內存中的首地址
typedef char(*PTRFUN)(int); //定義一種函數指針類型爲PTRFUN,輸入參數爲int, 返回類型的char的函數指針
PTRFUN pFun; //指針變量聲明
typedef shared_ptr<Layer<Dtype> > (*Creator) (const LayerParameter&);
// Creator 爲一種函數指針的類型別名