2
我讀過這個問題How to make a function return a pointer to a function? (C++)函數如何返回指向函數的函數?
...但我仍然有問題。 Index
函數返回一個枚舉器函數,該函數接受一個函數,將其生成每個索引。該函數簽名已經typedef
版在Indexer.hpp:
typedef bool (*yield)(Core::Index*);
typedef int (*enumerator)(yield);
...和Indexer
類
// Indexer.hpp
class Indexer {
public:
enumerator Index(FileMap*);
private:
int enumerate_indexes(yield);
};
// Indexer.cpp
enumerator Indexer::Index(FileMap* fMap) {
m_fmap = fMap;
// ...
return enumerate_indexes;
}
int Indexer::enumerate_indexes(yield yield_to) {
bool _continue = true;
while(_continue) {
Index idx = get_next_index();
_continue = yield_to(&idx);
}
return 0;
}
編譯器失敗,錯誤如下:
Indexer.cpp: In member function 'int (* Indexer::Index(FileMap*))(yield)':
Indexer.cpp:60:12: error: cannot convert 'Indexer::enumerate_indexes' from
type 'int (Indexer::)(yield) {aka int (Indexer::)(bool (*)(Core::Index*))}' to
type 'enumerator {aka int (*)(bool (*)(Core::Index*))}'
上午什麼我在聲明中錯過了什麼?
我有問...爲什麼你在這裏讓生活如此困難?什麼是所有的函數指針? –
指向非成員函數的指針與指向成員函數的指針不同。區別在於指向非成員函數的指針不需要調用對象,但指向成員函數的指針可以。我建議你閱讀['std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)和['std :: bind'](http:// en。 cppreference.com/w/cpp/utility/functional/bind)。 –
另外你現在應該知道我們期望在這裏有一個[MCVE]。這段代碼中有大量未提及的類型。 –