0

在 CI 中可以有一个结构和一些在头文件中声明的公共函数,而一些“私有”函数可以在源文件中声明为静态。例如:

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++ 类方法可行吗?如果我写:

foo.hpp

struct Foo {:
  void func1();
private:
  void func2();
};

func2仍将与外部链接。有没有办法让它内部保留它在结构内?

4

1 回答 1

0

您可以在 C++ 中声明普通静态函数,就像在 C 中一样,在任何翻译单元中。但它们将是普通的静态函数,而不是类方法。

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

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

于 2019-11-09T16:52:08.060 回答