繁体   English   中英

在 C++ 中放置与类方法有关的辅助函数的位置

[英]Where to put helper functions pertaining to class method in C++

假设我有一个这样的类Foo

foo.h :

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. 链接对函数的工作方式没有任何影响,私有成员变量的工作方式与所有其他变量完全一样(除非您无法从外部访问其名称)。
    也就是说,它就像将任何变量传递给任何函数一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM