【发布时间】:2013-05-29 12:08:05
【问题描述】:
我对私有方法和函数有疑问。 假设我有一些不需要在类中的实用方法。但是这些相同的方法需要调用我不想向用户公开的其他方法。例如:
Suspect.h
namespace Suspect {
/**
* \brief This should do this and that and more funny things.
*/
void VerbalKint(void); // This is for you to use
}
Suspect.cpp
namespace Suspect {
namespace Surprise {
/**
* \brief The user doesn't need to be aware of this, as long
* the public available VerbalKint does what it should do.
*/
void KeyserSoze(void) {
// Whatever
}
} // end Surprise
void VerbalKint(void) {
Surprise::KeyserSoze();
}
}
所以,这个布局有效。包含Suspect.h 时,只有VerbalKint 可见。
这也可以使用一个类并将VerbalKint 标记为静态来实现:
class Suspect {
public:
// Whatever
static void VerbalKint(void);
private:
static void KeyserSoze(void);
};
我想知道这两种方法之间是否有任何区别。一个比另一个更好(更快、更容易维护)吗?
你有什么想法?
【问题讨论】:
-
如果您希望示例相同,您也应该在课堂上创建
KeyserSozestatic。但是,如果你把它作为一个类放在头文件中,那么包括那个头文件的每个人都可以看到有一个名为KeyserSoze的函数,所以你不能“隐藏”它。 -
一方面:你不能在不包含类定义的情况下创建静态函数的前向声明。
-
@JoachimPileborg,谢谢。我错过了!
-
另外,如果您在源文件中使用 anonymous 命名空间,您实际上是不允许导出其中的函数。就像现在一样,如果有人用正确的命名空间前缀制作了
KeyserSoze的原型,那么他们可以使用它,如果它是匿名的,他们就不能。 -
Suspect如果应该是对象类型,则应该是类,如果不应该是对象类型,则应该是命名空间。
标签: c++ namespaces