我有一些从序列化数据中读取各种类型的函数,例如:
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 <SOMETHING??> class Dispatcher
{
void dispatch()
{
// ????
}
SOMEFUNCTIONTYPE callback;
DataDeserializer myDeserializer;
};
然后声明各种特定的调度程序:
Dispatcher<int,int,int> myDispatcherA (deserializer, callbackA);
Dispatcher<int,std::string> myDispatcherB (deserializer, callbackB);
Dispatcher<std::string,int,MyClass,int> myDispatcherC (deserializer, callbackC);
然后当我想调度时,我只需调用:
myDispatcherB.dispatch();
下面会扩展成这样的东西:
void dispatch()
{
callback (myDeserializer.getString(), myDeserializer.getInt(), myDeserializer.getMyClass(), myDeserializer.getInt());
}
这对 C++11 可变参数模板可行吗?我已经阅读了一些关于它们的内容,似乎递归使用了很多。