我一直努力遵循一些这方面的建议代表:如何实现使用仿函数和运算符()
https://softwareengineering.stackexchange.com/a/213635/46534
和
https://en.wikipedia.org/wiki/Function_object
但努力得到它的编译。
我有一个委托定义:
struct SomeDelegate {
void operator()(SomeType *data) {
//do some stuff with data
}
};
然后,它接受一个函数指针的成员函数:
void DoSomethingThatCallsback(void(*callback)(SomeType *)) {
callback(ptrToSomeType);
}
,然后当我尝试用这个成员函数如下:
foo.DoSomethingThatCallsback(SomeDelegate());
我得到编译错误:
cannot convert argument 1 from 'SomeDelegate' to 'void (__cdecl *)(Core::SomeType *)'
全部我一直在阅读的例子表明这是可能的。
我使用模板这样的尝试:
template <typename Callback>
void DoSomethingThatCallsback(Callback callback)
但我得到一个类似的错误。
我最终寻找更多的OOP方法来诉诸功能指针或移动到C++ 11。另外,无法使用STL。
更新了更多的背景
struct MapOpenedDelegate {
public:
void operator()(Map *openedMap) {
}
};
class MapReader {
public:
template <typename Callback>
void RegisterMapOpenedCallback(Callback &callback) {
_callbacks.Add(callback);
}
private:
Rise::List<void(*)(Map *)> _callbacks;
};
...
mapReader.RegisterMapOpenedCallback(MapOpenedDelegate());
你想传递指向函数的指针是运算符吗?请记住,运算符不能是静态的,因此它不能作为指向函数的指针传递。 –