我一直努力遵循一些這方面的建議代表:如何實現使用仿函數和運算符()
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());
你想傳遞指向函數的指針是運算符嗎?請記住,運算符不能是靜態的,因此它不能作爲指向函數的指針傳遞。 –