2009-10-27 81 views
9

好吧,靜態內聯方法?

這裏是我想要做的......現在,它正在編制,但在連接失敗...... LNK2001

我想要的方法靜態的,因爲沒有成員變量,但是我也希望他們內聯他們提供的加速。

這樣做的最好方法是什麼?以下是我在一言以蔽之:

/* foo.h */ 
class foo 
{ 
    static void bar(float* in); 
}; 

/* foo.cpp */ 
inline void foo::bar(float* in) 
{ 
    // some dark magic here 
} 

我試圖做到這一點,因爲我希望能夠去:

foo::bar(myFloatPtr); 

富沒有任何成員變量...它沒有任何意義。

+0

另外,從設計的角度來看,是否可以使用對float而不是指針的引用?參考通常是優選的。 – GManNickG 2009-10-27 00:58:12

+0

是的,我知道...但在這種情況下,我無法繞過動態:) – Polaris878 2009-10-27 01:02:51

+0

++ 1對於「黑暗魔法在這裏」。 – nahpr 2012-11-12 22:12:26

回答

10

如果您從其他cpp文件(而不是foo.cpp)調用bar,它需要位於頭文件中。

+1

grrrr有道理 – Polaris878 2009-10-27 01:02:12

3

您必須在頭文件中定義內聯函數,而不是單獨的實現文件。當頭文件被#include時,如果希望被內聯,則需要定義。

您看到的鏈接失敗是因爲聲明(在頭文件中)不通知編譯器該方法是內聯的,而實現是內聯的,因此不可用於鏈接。

5

首先,我會將它們置於namespace之內,因爲在那個"class"中根本沒有邏輯。其次,你可以直接在頭文件中定義函數體來讓編譯器看到它們。否則,您需要whole program optimization由鏈接器完成內聯這些功能(AFAIK)。

+0

是的,你可能是正確的名稱空間...我有他們在類中,因爲他們都有類似的功能 – Polaris878 2009-10-27 01:03:53

1

通常可以在內聯函數中聲明它們(在頭文件中)。編譯器可以像使用它們一樣自由地內聯函數,但不能將內聯函數內聯任何東西。如果您使用的是Visual C++,請啓用「內聯任何適合的」,「鏈接時代碼生成」和「支持快速代碼」。