ich eine Struktur haben, zu speichern, verwendet werden, die ich um meine Anwendung zu übergeben, die eine Reihe von Callback-Funktionen enthält:Kann std :: function eine Funktion mit variadische Argumente
typedef struct {
std::function<void (void)> f1;
std::function<void (int)> f2;
std::function<int (float *)> f3;
// ... and so on
} CallbackTable;
I staatliche Kontrolle in der Anwendung handhaben durch Binden verschiedener Funktionen an die verschiedenen Rückrufe, abhängig von dem aktuellen Systemzustand; es funktioniert gut.
Was würde ich jetzt tun möchte, ist ein paar zusätzliche Rückrufe mit Signaturen, die variable Anzahl von Argumenten, ähnlich wie printf hinzufügen: zum Beispiel
std::function<int (const char * format, ...)> printToStdOut;
Diese nicht Arbeit. In Visual C++, erhalte ich eine Fehlermeldung, die besagt:
error C2027: use of undefined type 'std::_Get_function_impl<_Fty>'
Ich bin immer noch meinen Weg durch diesen Bereich von C++ Syntax Gefühl und würde schätzen es sehr, einen Rat, wie ich von hier aus weitergehen sollte. Mein vorrangiges Ziel ist es, einen Anruf entlang der Linien zu machen, in der Lage sein:
myCallbackTable.printToStdOut("I've just eaten %d bananas\r\n", nBananas);
... und das Ausgangssignal an eine Konsole gerichtet sein, in eine Datei oder auf ein GUI-Fenster nach dem Systemzustand .
Wenn es sollte ein [ 'std :: ostream' ist verwenden ] (http://www.cplusplus.com/reference/ostream/ostream/ostream/) statt. – nwp
'std :: function' ist nur für Funktionstypen der Form' R (ArgTypes ...) 'definiert, wobei' ArgTypes ...'ist eine Paket-Erweiterung eines Typen-Parameter-Pakets (d. h. eine (möglicherweise leere) Liste von Typen). Also, keine C-Style Variadic Funktionen erlaubt. –
AFAIK keine Spezialisierung von 'std :: function' für variadic Funktionen, siehe eine mögliche Umgehung [hier] (https://www.daniweb.com/software-development/cpp/threads/467086/stdfunction-with-several- or-none-parameters # post2034402), nicht sicher, ob es verwandt ist. – P0W