mio codice problema:C++ sovraccarico: stringa letterale vs boost :: funzione ambiguità
#include <string>
#include <boost/function.hpp>
void func (const std::string&) {}
void func (const boost::function<void()>&) {}
int main() {
func (main); // good
func ("bad");
return 0;
}
=>
error: call of overloaded ‘func(const char [4])’ is ambiguous
overload.cpp:4: note: candidates are: void func(const std::string&)
overload.cpp:5: note: void func(const boost::function<void()()>&)
So che potrei risolvere questo chiamando esplicitamente func (string ("cattivo ")); o fornendo una funzione (const char *), ma mi chiedo se c'è un modo per mantenere il lato del chiamante come nell'esempio e senza introdurre più sovraccarichi.
Forse qualcosa con boost :: enable_if? Grazie per eventuali suggerimenti.
pensate davvero che la causa sia il sovraccarico che richiede 'boost :: function', avete tentato ad esempio di compilare senza tale sovraccarico? Funzionerà? – Nim
sì è causato dalla funzione boost ::. L'esempio che ho pubblicato riproduce l'intera situazione. – denis
sì - non ho provato prima di chiedere, solo un po 'perplesso che questo era il caso - sembra che sia .. hmm .. a corto di fornire sovraccarichi per tutto, non sono sicuro che ci sia una soluzione pulita per questo ... – Nim