J'ai lu cette question How to make a function return a pointer to a function? (C++)Comment la fonction peut renvoyer le pointeur sur la fonction qui prend une fonction?
... mais j'ai toujours un problème. La fonction Index
renvoie une fonction d'énumérateur qui prend une fonction à laquelle elle renvoie chaque index. Les signatures de fonction ont été typedef
ed dans Indexer.hpp:
typedef bool (*yield)(Core::Index*);
typedef int (*enumerator)(yield);
... et la classe 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;
}
Le compilateur échoue avec l'erreur ci-dessous:
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*))}'
Qu'est-ce que Je manque dans mes déclarations?
Je dois demander ... Pourquoi faites-vous la vie si difficile pour vous ici? Qu'y a-t-il avec tous les pointeurs de fonction? –
Un pointeur vers une fonction non membre n'est pas identique à un pointeur sur une fonction membre. La différence étant qu'un pointeur sur une fonction non membre n'a pas besoin d'un objet à appeler, mais un pointeur sur une fonction membre le fait. Je vous suggère de lire sur ['std :: function'] (http://en.cppreference.com/w/cpp/utility/functional/function) et [' std :: bind'] (http: // en. cppreference.com/w/cpp/utility/functional/bind). –
Aussi, vous devriez savoir maintenant que nous attendons un [MCVE] ici. Vous avez une tonne de types non mentionnés dans cet extrait. –