C++:从非类函数调用类方法

C++: call class method from a non-class function

本文关键字:函数调用 类方法 C++      更新时间:2023-10-16

我想写一个帮助函数,它调用一个类方法:

foo.h

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

foo.cpp

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

我应该怎么做,或者最好的方法是什么?

为了调用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();
}

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

它需要一个类的实例来调用。也许您希望该实例与fun被调用的实例相同。在这种情况下,您可以将*this传递给helperFun:

void cls::fun(){
  helperFun(*this);
}
void helperFun(cls& obj){
  obj.fun1();
}

将helper函数作为参数传递给fun1:

void cls::fun(){
  helperFun(this); //currently passing as this pointer
}
void helperFun(cls* obj){
  obj->fun1();
}

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

  • 通过在CCD_ 11的主体内创建一个CCD_
  • 通过传递一个cls对象(或对它的引用,或指向它的指针(作为有趣的参数(包括更改fun的签名(
  • 通过创建cls类型的全局变量(我强烈反对使用此选项(

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

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