在何处放置与类方法相关的帮助程序函数C++



假设我有一个这样的类Foo

傅炯:

namespace mine {
class Foo {
Widget widget_;
public:
void bar();
// some other members...
};
} // namespace mine

foo.cpp

#include "foo.h"
namespace mine {
void Foo::bar() {
// Some very long code
}
} // namespace mine

出于可读性原因,我想将bar()拆分为多个函数。函数本身对Foo(或除Foo::bar()以外的任何其他实体(没有任何特定含义,仅用于拆分bar(),因此根据此讨论,我将在源文件中执行以下操作:

foo.cpp(重构(:

#include "foo.h"
// anonymous namespace to put all helper functions
namespace {
void computeResult() { ... }
void modifyWidget(Widget& w) { ... }
void doThis() { ... }
void doThat(Widget& w) { 
// ... 
modifyWidget(w);
}
} // <anonymous> namespace
// actual methods are defined here    
namespace mine {
void Foo::bar() {
::doThis();
::doThat(widget_);
::computeResult();
}
} // namespace mine

所以我在源文件中定义一个匿名命名空间以定义帮助程序函数,这样我就有静态链接,并且帮助程序函数在源文件外部不可见。对我来说看起来很奇怪的一件事是,类方法依赖于不属于类的函数,但如果这是一个问题,我们甚至无法使用标准库。

  • 这种方法是否合理?您有更好的建议吗?
  • 将私有成员Foo::widget_传递给某个修改它的独立函数(doThat()(是否存在问题?我在这里假设在静态链接帮助程序函数的狭窄上下文中,调用方/被调用方知道他们在做什么。
  1. 是的,这是明智的。它也不少见,我的印象是它越来越受欢迎。
  2. 链接对函数的工作方式没有任何影响,私有成员变量的工作方式与所有其他变量完全相同(除了您无法从外部访问其名称(。
    也就是说,这就像将任何变量传递给任何函数一样。

相关内容

最新更新