2015-12-17 32 views
0

C++中有一種方法可以根據預處理器標誌來定義類型嗎?我有兩個版本的庫,一個是本地庫,另一個是建立在thirft之上的庫。定義類型的宏

兩個版本都具有完全相同的函數簽名,但返回類型和參數類型除外。本地版本傳遞周圍物體的指針,而thirft版本使用i64來表示指針。

我想知道是否有一種方法可以構建一個項目,該項目將使用任何基於編譯標誌的庫。因此,例如:

//native 
AType* obj = fun(AnotherType* another_obj) 

//thirft 
i64 obj = fun(i64 another_obj) 

我想知道是否有有點像這樣的結構:

if native 
    X is Atype* 
    Y is AnotherType* 
else 
    X is i64 
    Y is i64 
end 

//native 
X obj = fun(Y another_obj) 

//thirft 
X obj = fun(Y another_obj) 
+0

閱讀#if。 –

回答

5

如果這兩個版本都能夠用相同的已知數據編譯(這樣你就不會實際上不是在不使用它,只是有不同的函數簽名的版本定義AnotherType),那麼你可以使用std::conditional

using ActualType = std::conditional<IS_NATIVE, i64, AnotherType>::type; 

否則,你必須堅持復古#if #else #endif宏。

4

你想要的東西,如:

#ifdef native 
    typedef Atype* X 
    typedef AnotherType* Y 
#else 
    typedef i64 X 
    typedef i64 Y 
#endif 

如果native總是設置(以一個非零值或零值),您可以改爲使用#if native