C ++: utwórz własny dyspozytor funkcji z szablonu zmiennego
Mam pewne funkcje, które odczytują różne typy z danych serializowanych, np .:
class DataDeserializer
{
int getInt();
std::string getString();
MyClass getMyClass();
}
Następnie mam różne funkcje wywołania zwrotnego, które przyjmują dowolne parametry, np .:
void callbackA (int, int, int);
void callbackB (int, std::string);
void callbackC (std::string, int, MyClass, int);
Chcę wywołać różne wywołania zwrotne z argumentami odczytanymi ze zdrirializowanego strumienia danych. Chciałbym jak najbardziej zautomatyzować kod podstawowy. Myślałem, że mogę użyć szablonów. Gdybym miał jakąś klasę Dyspozytora, np .:
template <SOMETHING??> class Dispatcher
{
void dispatch()
{
// ????
}
SOMEFUNCTIONTYPE callback;
DataDeserializer myDeserializer;
};
Następnie zadeklaruj różnych konkretnych dyspozytorów:
Dispatcher<int,int,int> myDispatcherA (deserializer, callbackA);
Dispatcher<int,std::string> myDispatcherB (deserializer, callbackB);
Dispatcher<std::string,int,MyClass,int> myDispatcherC (deserializer, callbackC);
Potem, kiedy chcę wysłać, po prostu dzwonię:
myDispatcherB.dispatch();
który pod spodem rozwinąłby się w coś takiego:
void dispatch()
{
callback (myDeserializer.getString(), myDeserializer.getInt(), myDeserializer.getMyClass(), myDeserializer.getInt());
}
Czy jest to możliwe dzięki szablonom zmiennym C ++ 11? Przeczytałem trochę na ich temat i wydaje się, że rekursja jest często używana.