C++:从非类函数调用类方法
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();
}
将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.
相关文章:
- 使用用户定义的参数调用future/async并调用类方法
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 有没有办法从同一类中的函子调用类方法?
- 是否可以基于类模板的参数调用类方法和全局方法
- 需要"模板<>"语法 --> 通过函数调用类模板
- C++ - 从另一个类构造函数调用类构造函数
- 简化静态成员函数调用的方法
- 为什么从 DLL 调用类方法需要虚拟说明符?
- 我应该删除来自其他函数或类方法的指针吗?
- 从C++中的虚拟析构函数调用虚拟方法
- 在没有限定的情况下从 T 构造函数调用类 T 的纯虚拟实现?
- 通过该类中定义的指针调用类方法时的语法
- 从构造函数调用类函数或使用智能指针
- 默认参数允许构造函数调用私有方法
- 从另一个类调用类方法
- 我可以从析构函数的类方法调用它吗
- C++ - 调用<类方法没有匹配函数>
- C++:从非类函数调用类方法
- 通过包装对象上的函数指针调用类方法出错
- 模板函数调用类中的受保护方法