在很多情况下,我发现我的类需要私有函数来分解它们的功能并重用代码。典型的实现将是:可以在.cpp中声明/定义静态方法吗?
MyClass.h
#include "AnotherClass.h"
class MyClass {
public:
float foo() const;
private:
float fooPrivate(const AnotherClass& ac) const;
}
MyClass.cpp
#include "MyClass.h"
float MyClass::foo() const {
return fooPrivate(AnotherClass());
}
float MyClass::fooPrivate(const AnotherClass& ac) const {
return ac.foo();
}
这是确定的,但在头文件中声明fooPrivate()可在下列情况下存在问题:
我们可能不希望AnotherClass包含在头文件中,如果它只是供内部使用,MyClass以外不需要。
如果需要很多私有函数,我们可能会用不必要的私有函数来污染头文件,这会使代码不清晰,增加编译时间并且更难以维护。
我知道PIMPL方法,解决了所有这些问题,但我的问题是,如果我们不希望使用平普尔是否确定了几个功能做这样的事情?
MyClass.h
class MyClass {
public:
float foo() const;
}
MyClass.cpp
#include "MyClass.h"
#include "AnotherClass.h"
static float fooPrivate(const AnotherClass& ac) {
return ac.foo();
}
float MyClass::foo() const {
return fooPrivate(AnotherClass());
}
在这种情况下,不需要它包括AnotherClass.h在MyClass.h和fooPrivate()不能被任何人称为除了MyClass.cpp内部和声明之后。我对吗?
是否有任何使用此警告的注意事项,或者当我的程序变得更大时,我是否会遇到问题?
在我看来,你的私人成员函数'fooPrivate'本来可以是静态的。否则,你的第二种方法就不能很好地工作。 – 2014-10-19 14:52:39
你知道,'AnotherClass'的前向声明就足够了。这足够轻量。 – Deduplicator 2014-10-19 14:54:04
我了解你。然而,这一点仍然是一样的。即使fooPrivate()使用MyClass的某些成员(这会使其成为非静态的),但在很多情况下,可以使用静态函数来执行某些内容,然后可以使用静态调用的结果来修改此类。 – 2014-10-19 14:57:36