gpt4 book ai didi

c++ - 禁止使用头文件中包含的函数

转载 作者:太空宇宙 更新时间:2023-11-04 13:47:26 24 4
gpt4 key购买 nike

我将函数与一个类一起存储在一个头文件中,我在我的 Source.cpp 文件的头中#include。 header 包含一个 date 类,以及相关的构造函数、重载运算符和方法。

我在我的一些类的构造函数中利用了这些函数(例如,将公历日转换为儒略日数字的函数)。但是,我想不出允许在头文件外部 使用其中一些函数的正当理由:毕竟它们只对类有用。

有没有办法让我无法在头文件之外调用这些函数,而不是让它们成为我的类的 private 方法?

编辑:该解决方案是否也适用于类中的其他实体,例如struct

最佳答案

考虑到 C++ 中头文件的性质,您要实现的目标非常困难。通常,您将内部细节隐藏在嵌套的匿名命名空间中,但是导入您的 .h 文件的调用者仍然可以看到这些细节。因此,您只能在 .cpp 文件中使用这个技巧来制作私有(private)的、非导出的符号。

正确的做法是将这些私有(private)类实现您的构造函数的实现放在您的 .cpp 文件中。

// foo.h
namespace fooproject {

class Foo {
public:
Foo(::string s);

private:
int converted_s; // Will be derived from constructor input
}

然后:

// foo.cpp
namespace {
// Everything here is visible to this compilation unit only.

int SecretMagicConverter(::string s) {
// magic code
}
} // namespace

namespace foo_project {

Foo::Foo(::string s) {
// Here we can plainly call the anonymous namespaced functions above.
converted_s = SecretMagicConverter(s);
}

} // namespace foo_project

关于您的跟进,是的,该匿名命名空间中的任何内容都可以在该 .cpp 中“正常”使用,但对您的 .h 文件的任何用户都是隐藏的。

关于c++ - 禁止使用头文件中包含的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25319594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com