Vorrei utilizzare un std::function
come argomento di un metodo e impostare il suo valore predefinito come std::stoi
.Come creare una funzione std :: come argomento del metodo con std :: stoi come valore predefinito?
ho provato il seguente codice:
void test(std::function<int(const std::string& str, size_t *pos , int base)> inFunc=std::stoi)
Purtroppo ho il seguente errore:
no viable conversion from '<overloaded function type>' to 'std::function<int (const std::string &, size_t *, int)>'
sono riuscito a compilare aggiungendo creando un metodo dedicato.
#include <functional>
#include <string>
int my_stoi(const std::string& s)
{
return std::stoi(s);
}
void test(std::function<int(const std::string&)> inFunc=my_stoi);
Cosa c'è che non va nella prima versione? Non è possibile utilizzare std::stoi
come valore predefinito?
Perché non si lamenta di 'typedf int (* fn) (const std :: string &, size_t *, int); fn f = std :: stoi; '? –
@CharlesPehlivanian: Perché solo un overload è convertibile in quel tipo di funzione (motivo per cui il cast nel mio esempio funziona). O potrebbe essere un argomento per il costruttore di template di 'std :: function', e al compilatore non è consentito istanziare entrambe le specializzazioni di template per vedere quale potrebbe essere valida. –
@ MikeSeymour: grazie per la spiegazione, stavo pensando che c'era qualcosa di simile ma non riuscivo a capire cosa. –