我想编写一个调用类方法的帮助函数:
foo.h中
class cls{
public:
void fun();
void fun1();
};
Foo.cpp中
void cls::fun(){
helperFun();
}
void helperFun(){
fun1();//how to call fun1() here?
}
我该怎么做,或者最好的方法是什么?
答案 0 :(得分: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();
}
这只是一种(非常直接)安排事物的方式,一般来说有更多的选择,挑选最好取决于你想要做的事情。
答案 1 :(得分:4)
它需要调用类的实例。也许您希望实例与调用fun
的实例相同。在这种情况下,您可以将*this
传递给helperFun
:
void cls::fun(){
helperFun(*this);
}
void helperFun(cls& obj){
obj.fun1();
}
答案 2 :(得分:1)
将辅助函数作为参数传递给fun1:
void cls::fun(){
helperFun(this); //currently passing as this pointer
}
void helperFun(cls* obj){
obj->fun1();
}
答案 3 :(得分:1)
非静态类方法(例如fun
)始终在其类的实例上调用。你需要一个cls实例来调用fun。您可以通过以下方式之一获取该实例:
cls
的正文中创建fun
对象。cls
对象(或对它的引用或指向它的指针)作为参数传递给fun(包括更改fun
的签名。)cls
类型的全局变量(我强烈反对此选项)。或者,fun
可能被声明为静态,前提是它不使用cls类的任何字段。在这种情况下,您可以使用以下指令调用它而不使用关联的cls实例:cls::fun()
。
答案 4 :(得分:0)
如果你需要一个从类的一个方法调用的辅助函数,然后它需要调用同一个类的另一个方法,为什么不让它成为类的成员?我的意思是,它不能是一个独立的方法,它与你的班级紧密结合。所以它必须属于IMO类。