繁体   English   中英

Class 方法内部链接

[英]Class methods internal linkage

在 C 中,我可以在 header 文件中声明结构和一些公共函数,而在源文件中可以将一些“私有”函数声明为 static。 例如:

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++ 中声明普通的 static 函数,就像在 C 中一样,在任何翻译单元中。 但它们将是普通的 static 函数,而不是 class 方法。

类的方法不限于单个翻译单元。 使用多种方法将大型 class 分解为两个或多个不同的翻译单元的情况并不少见。 当然,一个翻译单元的私有方法当然可以按翻译单元的顺序调用其他私有方法。 因此,它们的联系必须是外部的。

这就是标准 C++ 为您提供的所有内容。 除此之外,如果不考虑可移植性,则可以使用特定于实现的扩展。 例如,gcc 提供可见性属性 “内部”可见性似乎暗示 static 链接。 我还没有验证这一点,但该属性也被指出适用于 C++ 代码,而不仅仅是 C。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM