Имам структура, която предавам около моето приложение, която съдържа куп функции за обратно извикване:
typedef struct {
std::function<void (void)> f1;
std::function<void (int)> f2;
std::function<int (float *)> f3;
// ... and so on
} CallbackTable;
Аз управлявам контрола на състоянието в рамките на приложението, като обвързвам различни функции към различните обратни извиквания, в зависимост от текущото състояние на системата; работи добре.
Това, което бих искал да направя сега, е да добавя няколко допълнителни обратни извиквания със сигнатури, съдържащи променлив брой аргументи, подобно на printf: например,
std::function<int (const char * format, ...)> printToStdOut;
Това не работи. В Visual C++ получавам съобщение за грешка, което гласи:
error C2027: use of undefined type 'std::_Get_function_impl<_Fty>'
Все още си проправям път през тази област на синтаксиса на C++ и ще съм много благодарен за всеки съвет как да продължа оттук нататък. Основната ми цел е да мога да осъществя обаждане по следния начин:
myCallbackTable.printToStdOut("I've just eaten %d bananas\r\n", nBananas);
...и изходът да бъде насочен към конзола, към файл или към GUI прозорец, според състоянието на системата.
std::ostream
вместо . - person nwp   schedule 04.09.2014std::function
се дефинира само за типове функции във форматаR(ArgTypes...)
, къдетоArgTypes...
е разширение на пакет на пакет с параметри на тип (т.е. (евентуално празен) списък от типове). Така че не са разрешени променливи функции в стил C. - person T.C.   schedule 04.09.2014std::function
за различни функции, вижте възможно заобикаляне на тук, не съм сигурен дали е свързано. - person P0W   schedule 04.09.2014