静态内联方法?

时间:2009-10-27 00:54:27

标签: c++ static inline

好,

以下是我正在尝试做的事情......现在它正在编译但未能链接...... 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);

foo没有任何成员变量......它没有意义。

4 个答案:

答案 0 :(得分:10)

如果你从另一个cpp文件(foo.cpp除外)调用bar,它需要在头文件中。

答案 1 :(得分:5)

首先,我会将它们放在namespace中,因为"class"中根本没有逻辑。其次,您可以直接在头文件中定义函数体,以允许编译器查看它们。否则,链接器需要whole program optimization来内联这些函数(AFAIK)。

答案 2 :(得分:3)

您必须在头文件中定义内联函数,而不是单独的实现文件。当头文件是#included时,如果希望它们被内联,那么这些定义是必需的。

您看到的链接失败是因为声明(在头文件中)没有通知编译器该方法是内联的,而实现是内联的,因此无法用于链接。

答案 3 :(得分:1)

通常可以在声明它们的位置(在头文件中)实现内联函数。编译器可以像你拥有的那样自由内联函数,但你不能强制它内联任何东西。如果您使用的是Visual C ++,请启用“内联任何合适的”,“链接时代码生成”和“支持快速代码”。