У меня есть структура, которую я передаю по моему приложению, которая содержит кучу функций обратного вызова:
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);
... и направлять вывод на консоль, в файл или в окно графического интерфейса, в зависимости от состояния системы.
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