我不明白这些功能有何不同
I can't understand how these functions are different
我有callbackType,如果我在没有类的情况下定义函数,它会起作用,但当我尝试用类来定义函数时,它只会给我一个转换错误。
.h
typedef void(*NclCallback)(NclEvent event, void* userData);
NclCallback callBack;
.cpp
void callBackF(NclEvent event, void* userData){}
EventManager::EventManager(){
this->callBack = callBackF; //this works,
this->callBack = callBackFunction; // this doesn't work
this->callBack = this->callBackFunction; // this doesn't work
}
void EventManager::callBackFunction(NclEvent event, void* userData){}
不同之处在于,类的成员函数有一个隐式的第一个参数this,该参数指向调用该函数的类的实例。因此,两个函数之间的区别在于,独立函数采用两个参数,而成员函数采用三个参数。
为了解决这个问题,您需要使用std::bind将回调绑定到您希望调用它的EventManager实例。或者,您可以将回调函数设置为静态。
类内的函数需要一个指向函数调用对象的this
指针。因此,签名由传递的额外T*
(在您的情况下为EventManager*
)扩展。签名不匹配。
您可以使用static
函数告诉编译器此函数不在特定实例上操作。您不会得到this
指针,您的代码应该可以工作。如果确实需要访问实例指针,请查看std::bind
。
您还可以使用std::function
和lambdas来存储回调:
std::function<void(int, int)> callback;
void f1(int, int) {
cout << "one" << endl;
}
struct f2 {
void operator() (int, int) {
cout << "two" << endl;
}
};
struct f3 {
void member(int, int) {
cout << "three" << endl;
}
};
int main() {
callback = f1;
callback(0,0);
callback = f2{};
callback(0,0);
f3 obj;
callback = [&obj] (int a, int b) { obj.member(a,b); };
callback(0,0);
using namespace std::placeholders;
callback = std::bind(&f3::member, obj, _1, _2);
callback(0,0);
return 0;
}
相关文章:
- Python中的for循环与C++有何不同
- 在C++中释放内存期间,迭代器与指针有何不同
- -fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同
- 收益率和回报有何不同?
- 覆盖私有功能,它与受保护功能有何不同?
- 无论代码长度如何,以下代码的内存要求有何不同?
- stl::unordered_map 和 stl::vector 的销毁有何不同
- C++ 友元函数在内存位置上有何不同?
- 您如何在与打开窗口的功能的不同函数中使用Draw函数
- C 是否具有接口类概念,如果它在那里,那么它与Java接口类别有何不同
- std::u8string与std::string有何不同?
- 为什么“静态”功能在不同的tu中不会破坏ODR
- 两种类型转换有何不同?
- 这个语句到底是什么意思 stack<int, list<int> > 它与 stack 有何不同<int>?
- 英特尔®事务同步扩展新指令 (TSX-NI) 与英特尔 TSX 有何不同?
- 具有模板类型内部功能的不同操作的NOExcept
- 指向成员函数的指针与指向数据成员的指针有何不同
- 字符 * 和字符串在C++中有何不同?(在描述中编写代码)
- 在C++中,Mixin与面向策略的设计有何不同
- 我不明白这些功能有何不同