2016-06-27 41 views
0

我有大約200個文件,我們使用「abs」函數來查找整數,長整數和雙精度的絕對值。對於雙打,正確的功能調用是fabs而不是abs。 現在在C++ 11中處理爲abs支持雙精度以及在c + + 11中,但我們目前在舊的編譯器。如何#定義調用(雙X)到func2(雙X)

轉移到C++ 11計劃明年,我們需要間歇性地修復。

現在所有這些文件都有一個名爲StdAfx.h的頭文件。所以我想要像#define abs(X)fabs(X)這樣的東西。然而,問題是這些文件還有其他頭文件,如math.h等,其中abs和fab實際上是聲明,這使得這些代碼不可編譯。

Gcc說abs正在被重新宣佈,因爲那些C++ standerad頭文件已經聲明瞭abs和fbs。

所以我想在StdAfx.h中使用一些語句,這樣只有abs(double x)的「CALL」被轉換爲fabs(double X),但不是它的定義。

請親引導我。

+0

你想要什麼是不可能的。改寫你的代碼。 –

+0

我不確定你爲什麼認爲這會比修正受影響的代碼更好。它可能讓你能夠快速構建,但從長期維護的角度來看,它似乎並不值得。 –

回答

3

你不需要宏;只是在公共頭文件中過載abs

static double abs(double x) { return fabs(x); } 
+0

另外考慮在操作名稱空間中定義重載(例如,my_abs_double_overload),然後使用「using namespace my_abs_double_overload」語句將該名稱空間引入到作用域中(意圖更清晰並且可以在C++ 11支持上使用ifdef) ? –