[英]C++: call class method from a non-class function
我想编写一个帮助函数,该函数调用类方法:
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();
}
将辅助函数作为参数传递给fun1:
void cls::fun(){
helperFun(this); //currently passing as this pointer
}
void helperFun(cls* obj){
obj->fun1();
}
非静态类方法(例如fun
)始终在其类的实例上调用。 您需要一个cls实例来调用fun。 您可以通过以下方式之一获取该实例:
cls
对象fun
。 cls
对象(或对其的引用或指向它的指针)作为参数传递给fun(涉及更改fun
的签名)。 cls
类型的全局变量(我强烈建议不要使用此选项)。 或者,只要不使用cls类的任何文件,就可以将fun
声明为静态的。 在这种情况下,可以使用以下指令在没有关联的cls实例的情况下调用它: cls::fun()
。
如果需要一个从该类的一个方法调用的帮助程序函数,然后又需要调用该同一个类的另一个方法,为什么不将其设为该类的成员呢? 我的意思是,它不能是独立的方法,它与您的类紧密结合在一起。 因此,它必须属于IMO类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.