[英]Passing a function as an argument in c++
我有以下电话:
void Derived::GetEntry(Skill&);
InorderTraverse(GetEntry);
哪个电话
void Base<ItemType>::InorderTraverse(void Visit(ItemType&)) const
尝试以书面形式编译
错误C3867:'Derived :: GetEntry':函数调用缺少参数列表; 使用'&Derived :: GetEntry'创建一个指向成员的指针
使用&Derived :: GetEntry生成
无法将参数1从'void(__thiscall Derived :: *)(Skill&)'转换为'void(__cdecl *)(ItemType&)'
将声明更改为静态void GetEntry ...可解决这些问题,但会产生一系列新问题(即我无法访问非静态对象(非静态成员引用必须相对于特定对象)
我有一个类似的遍历操作,可以很好地与静态声明一起使用,因为被调用函数仅显示有关被调用的每个对象的信息。
我一直在寻找答案的几天,我觉得这很简单。 有没有办法在另一个函数调用中使用非静态函数作为参数?
完整的代码是: https : //github.com/mindaika/SkillTree
编辑:插入完整的工作示例。
我建议您改用std函数指针。
例如:
#include <functional>
void main()
{
class TheClass
{
public:
TheClass()
{
m_function = ( std::tr1::bind(&TheClass::run, this) );
};
void run()
{
// stuff to do
};
std::tr1::function<void ()> m_function;
};
TheClass theclass;
theclass.m_function();
}
m_function(); //调用函数
正如我在问题中提到的那样,我试图解决由于使用静态变量而引起的“内存泄漏”(实际上不是泄漏,因为静电被破坏了,但直到泄漏检测器运行之后)。 我最终使用了对此处描述的封装指针的修改: C ++释放静态变量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.