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

时间:2014-08-15 00:26:46

标签: c++

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

我在我的一些课程中利用这些功能。构造函数(例如,将公历日转换为Julian日数的函数)。但是,我无法想出允许在头文件 之外使用其中一些函数的正当理由:毕竟,它们只对该类有用。

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

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

1 个答案:

答案 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文件的任何用户都是隐藏的。