【发布时间】:2018-07-17 18:31:46
【问题描述】:
您好,这是this previous question i did的更新
我试图通过类中的指针执行一个函数(类内容与我遇到的问题无关)。
这是上一个问题中发布的代码:
错误信息:
cannot convert ‘Clip::func’ from type ‘void (Clip::)(std::string) {aka void (Clip::)(std::basic_string<char>)}’ to type ‘callback {aka void (*)(std::basic_string<char>)}’
剪辑.h
void func(string str){
cout << str << endl;
}
剪辑.cpp
void Clip::update(){
typedef void(*callback)(string);
callback callbackFunction = func;
callbackFunction("called");
}
-----我找到的解决方案------
我和一个朋友做了一些快速研究以找到解决这种情况的方法,这就是我们发现的。尽管这可行,但我们对所涉及的表达式有一些疑问(帖子末尾的问题)
剪辑.h
typedef void (Clip::*Callback) (string);
void func(string _val);
剪辑.cpp
void Clip::update(){
Callback function;
function = &Clip::func;
(this->*function)("a");
}
问题:
a- 在上一篇文章中@tkausl 回答:“...成员函数指针与(非成员)函数指针不兼容”。这就是其他代码在任何类中都不起作用的原因(即使该类完全为空)?
b- 如果我们已经在 Clip 类中,为什么还要像这样声明指针:Clip::*Callback?
c- 这个表达式是什么意思?:this->*function
d- 是否有更简单的方法或表达方式来满足同样的要求?
提前致谢。
【问题讨论】:
-
我感觉你还没有掌握成员函数指针和普通函数指针的区别。请记住,非静态成员函数 需要 和要调用的实例。你不能调用
Clip::func,就像你不能将Clip::func分配给void(*)(string)一样。它会在哪个实例上调用它? -
This question 听起来像是重复的,但我并不是你真正要问的。
标签: c++ class pointers function-pointers class-members