2014-10-01 77 views
0

我正在編寫一個執行2D和3D計算的代碼C++。主要功能有一個參數,我可以從中判斷是做2D還是3D計算(dim=2dim=3)。根據dim啓用/禁用編譯特定代碼段的最佳選項是什麼?我發現this post這表明使用#ifdef,所以我想定義一個宏,然後使用#ifdef推廣C++代碼(將2D計算轉換爲3D計算)的有效方法

if(dim == 2) 
    #define DISABLE_3D true 

我相信有這樣做的更好的辦法,我很想有那。

+1

你不能以這種方式混合宏和代碼。如果在編譯時每個函數調用都知道暗淡值,則可以將其設置爲模板參數。編譯器可以根據常量值輕鬆優化未使用的代碼路徑。說實話,除非配置文件顯示這是一個瓶頸,否則我只會將暗淡作爲一個正常的參數。檢查int的值不是一個昂貴的操作。 – 2014-10-01 00:57:04

回答

3

您必須確定它們是編譯時還是運行時相關的。宏由編譯時間決定,因此程序將只使用2D或3D功能。如果您需要在運行時具有適用於2D和3D計算的函數,則應該避免使用#ifdef宏。

而不是使用if (dim==2)決定,你可能會利用C++的'功能重寫'功能。 由於缺少很多細節,我無法給出具體示例,但如果2D和3D數據存在差異,則可能暗示功能覆蓋可以實現。

+0

如果爲true,則應該避免使用'#ifdef'宏。 – 2014-10-01 01:08:22