C ++: создание диспетчера пользовательских функций из шаблона переменной
У меня есть некоторые функции, которые читают различные типы из сериализованных данных, например:
class DataDeserializer
{
int getInt();
std::string getString();
MyClass getMyClass();
}
Затем у меня есть различные функции обратного вызова, которые принимают произвольные параметры, например:
void callbackA (int, int, int);
void callbackB (int, std::string);
void callbackC (std::string, int, MyClass, int);
Я хочу вызвать различные обратные вызовы с аргументами, прочитанными из потока десериализованных данных. Я хотел бы максимально автоматизировать шаблонный код. Я думал, может быть, я мог бы использовать шаблоны. Если бы у меня был какой-то класс Dispatcher, например:
template class Dispatcher
{
void dispatch()
{
// ????
}
SOMEFUNCTIONTYPE callback;
DataDeserializer myDeserializer;
};
Затем объявите различных конкретных диспетчеров:
Dispatcher myDispatcherA (deserializer, callbackA);
Dispatcher myDispatcherB (deserializer, callbackB);
Dispatcher myDispatcherC (deserializer, callbackC);
Затем, когда я хочу отправить, я просто позвоню:
myDispatcherB.dispatch();
который снизу расширится до чего-то вроде этого:
void dispatch()
{
callback (myDeserializer.getString(), myDeserializer.getInt(), myDeserializer.getMyClass(), myDeserializer.getInt());
}
Возможно ли это с C ++ 11 variadic шаблонами? Я'Мы немного прочитали о них, и кажется, что рекурсия используется очень часто.