ho una struttura che mi passa intorno al mio programma che contiene una serie di funzioni di callback:Può std :: funzione di essere utilizzata per memorizzare una funzione con argomenti variadic
typedef struct {
std::function<void (void)> f1;
std::function<void (int)> f2;
std::function<int (float *)> f3;
// ... and so on
} CallbackTable;
mi occupo di controllo dello Stato all'interno dell'applicazione per associazione di diverse funzioni ai vari callback, a seconda dello stato corrente del sistema; funziona bene
Quello che mi piace ora fare è aggiungere un paio di callback in più con le firme contenenti un numero variabile di argomenti, simile a printf: per esempio,
std::function<int (const char * format, ...)> printToStdOut;
Questo non lavoro. In Visual C++, ricevo un messaggio di errore indicante:
error C2027: use of undefined type 'std::_Get_function_impl<_Fty>'
sto ancora sentendo la mia strada attraverso questa zona della sintassi C++ e sarei molto apprezzare qualche consiglio su come devo procedere da qui. Il mio obiettivo primario è quello di essere in grado di effettuare una chiamata lungo le linee di:
myCallbackTable.printToStdOut("I've just eaten %d bananas\r\n", nBananas);
... e di avere l'output diretto a una console, ad un file o ad una finestra GUI, a seconda dello stato del sistema .
Se è solo uscita siete interessati a è necessario utilizzare un [ 'std :: ostream' ] (http://www.cplusplus.com/reference/ostream/ostream/ostream/). – nwp
'std :: function' è solo definito per i tipi di funzione del modulo' R (ArgTypes ...) ', dove' ArgTypes ...'è un'espansione di pacchetto di un pacchetto di parametri di tipo (ad esempio, una (possibilmente vuota) lista di tipi). Quindi, non sono consentite funzioni variadiche in stile C. –
AFAIK nessuna specializzazione di 'std :: function' per le funzioni variadic, si veda un possibile lavoro in giro [qui] (https://www.daniweb.com/software-development/cpp/threads/467086/stdfunction-with-several- o-nessuno-parametri # post2034402), non sono sicuro se relativo. – P0W