Class 方法内部链接
Class methods internal linkage
在 C 中,我可以在头文件中声明一个结构和一些 public 函数,而一些 "private" 函数可以在源文件中声明为静态。例如:
foo.h
typedef struct Foo {
...
} Foo;
void func1(Foo *foo);
foo.c
#include "foo.h"
static void func2(Foo *foo) {...}
void func1(Foo *foo) {...}
在这种情况下 func2
是内部链接的。这可以用 C++ class 方法实现吗?如果我写:
foo.hpp
struct Foo {:
void func1();
private:
void func2();
};
func2
仍将被外部链接。有没有办法让它内部保留在结构中?
您可以在任何翻译单元中像在 C 中一样在 C++ 中声明普通静态函数。但它们将是普通的静态函数,而不是 class 方法。
A class的方法不限于单个翻译单元。具有许多方法的大型 class 被分解为两个或更多不同的翻译单元并不少见。当然,来自一个翻译单元的私有方法当然可以调用顺序翻译单元中的其他私有方法。因此,它们的联系必须是外部的。
这就是标准 C++ 为您提供的全部内容。除此之外,如果可移植性不是问题的话,可以使用特定于实现的扩展。例如,gcc 提供 the visibility attribute。 "internal" 可见性似乎暗示静态链接。我还没有验证这一点,但该属性也适用于 C++ 代码,而不仅仅是 C。
在 C 中,我可以在头文件中声明一个结构和一些 public 函数,而一些 "private" 函数可以在源文件中声明为静态。例如:
foo.h
typedef struct Foo {
...
} Foo;
void func1(Foo *foo);
foo.c
#include "foo.h"
static void func2(Foo *foo) {...}
void func1(Foo *foo) {...}
在这种情况下 func2
是内部链接的。这可以用 C++ class 方法实现吗?如果我写:
foo.hpp
struct Foo {:
void func1();
private:
void func2();
};
func2
仍将被外部链接。有没有办法让它内部保留在结构中?
您可以在任何翻译单元中像在 C 中一样在 C++ 中声明普通静态函数。但它们将是普通的静态函数,而不是 class 方法。
A class的方法不限于单个翻译单元。具有许多方法的大型 class 被分解为两个或更多不同的翻译单元并不少见。当然,来自一个翻译单元的私有方法当然可以调用顺序翻译单元中的其他私有方法。因此,它们的联系必须是外部的。
这就是标准 C++ 为您提供的全部内容。除此之外,如果可移植性不是问题的话,可以使用特定于实现的扩展。例如,gcc 提供 the visibility attribute。 "internal" 可见性似乎暗示静态链接。我还没有验证这一点,但该属性也适用于 C++ 代码,而不仅仅是 C。