0

I want to write a help function which calls a class method:

foo.h

class cls{
  public:
  void fun();
  void fun1();
};

foo.cpp

void cls::fun(){
  helperFun();
}

void helperFun(){
  fun1();//how to call fun1() here?
}

How should I do it, or what's the best way of doing it?

4

5 回答 5

6

为了调用一个方法,cls你需要cls手头有一个实例。fun可以访问this并使用它来提供helperFun该实例:

void cls::fun(){
  helperFun(*this);
}

// If fun1() was const, the parameter could be a const cls&
void helperFun(cls& arg){
  arg.fun1();
}

这只是安排事情的一种(非常直接的)方式,一般来说有更多的选择,选择最好的取决于你想要做什么。

于 2013-04-26T08:51:34.590 回答
4

它需要一个类的实例才能被调用。fun也许您希望实例与被调用的实例相同。在这种情况下,您可以传递*thishelperFun

void cls::fun(){
  helperFun(*this);
}

void helperFun(cls& obj){
  obj.fun1();
}
于 2013-04-26T08:51:29.273 回答
1

将辅助函数作为参数传递给 fun1:

void cls::fun(){
  helperFun(this); //currently passing as this pointer
}

void helperFun(cls* obj){
  obj->fun1();
}
于 2013-04-26T08:53:56.417 回答
1

非静态类方法,例如fun,总是在其类的实例上调用。你需要一个 cls 的实例来调用 fun。您可以通过以下方式之一获取该实例:

  • 通过clsfun.
  • 通过将cls对象(或对它的引用,或指向它的指针)作为参数传递给 fun(涉及更改 的签名fun)。
  • 通过创建类型的全局变量cls(我强烈反对这个选项)。

或者,fun可以声明为静态,前提是它不使用 cls 类的任何字段。在这种情况下,您可以在没有关联的 cls 实例的情况下调用它,使用以下指令cls::fun()

于 2013-04-26T08:57:00.583 回答
0

如果你需要一个从类的一个方法调用的辅助函数,然后它需要调用同一个类的另一个方法,你为什么不让它成为类的成员呢?我的意思是,它不能是一个独立的方法,它与你的类紧密耦合。所以它必须属于类,IMO。

于 2013-04-26T08:58:55.860 回答