Caffe源代碼中的C++宏用法

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 爲一種函數指針的類型別名

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章