我的函数存储在头文件中,我在#include
文件的标题中Source.cpp
。标头包含date
类,以及相关的构造函数,重载的运算符和方法。
我在我的一些课程中利用这些功能。构造函数(例如,将公历日转换为Julian日数的函数)。但是,我无法想出允许在头文件 之外使用其中一些函数的正当理由:毕竟,它们只对该类有用。
有没有办法让我无法在头文件之外调用这些函数,而不是让它们成为我班级的private
方法?
编辑:该解决方案是否也适用于该类中的其他实体,例如struct
s?
答案 0 :(得分:0)
鉴于C ++中头文件的性质,您要实现的目标非常困难。通常,您在嵌套的匿名命名空间中隐藏内部详细信息,但是对于导入.h文件的调用方仍然可以看到这些内容。因此,您只能在.cpp文件中使用此技巧来制作私有的非导出符号。
正确的做法是将这些私有类实现和放置在.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文件的任何用户都是隐藏的。