我可以在类中创建一个函数而不在该类的头文件中定义它吗?
答案 0 :(得分:4)
你为什么不试着看?
[ʇʇ,uɐɔnoʎ'oᴎ]
更新:为了反思下面的注释,重点是C ++语言对智能编译的重视,编译器需要知道类的大小(因此需要声明所有成员数据)和类接口(因此需要所有函数和类型声明)。
如果您希望在不需要更改类标题的情况下灵活地向类添加函数,请考虑使用pimpl idiom。但是,如果每次调用或使用您添加的功能或数据,这将花费您额外的取消引用。实施pimpl有各种常见原因:
答案 1 :(得分:3)
没有。但是,你可以模仿这样的:
struct X
{
void f();
X();
~X();
private:
struct impl;
impl * pimpl;
};
// X.cpp
struct X::impl
{
void f()
{
private_function();
...
}
void private_function() { ...access private variables... }
};
//todo: constructor/destructor...
void X::f() { pimpl->f(); }
答案 2 :(得分:2)
简答:不,你不能。
但是,如果您尝试将私有函数注入到仅在该类的实现中使用的类中,则可以在该类的.cpp文件中的匿名命名空间中创建一个函数,该文件接受该类型的对象通过引用或指针。
请注意,您将无法直接使用传递的对象内部状态(因为类没有办法声明与该匿名函数的友谊),但是如果该函数只是聚合来自公共接口的操作它应该工作得很好。
答案 3 :(得分:0)
答案 4 :(得分:0)
我不知道你想要做什么,但我有一种奇怪的直觉,即指向实现(pImpl)成语可能会有所帮助。如果要在cpp文件中添加公共方法,并且该方法未在标题中的类定义中声明,则不能这样做,并且没有意义。