【发布时间】:2013-09-17 10:30:39
【问题描述】:
我有一些函数可以从序列化数据中读取各种类型,例如:
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);
我想使用从反序列化数据流中读取的参数调用各种回调。 我想要的是尽可能地自动化样板代码。 我在想也许我可以使用模板。如果我有某种调度程序 类,例如:
template <SOMETHING??> class Dispatcher
{
void dispatch()
{
// ????
}
SOMEFUNCTIONTYPE callback;
DataDeserializer myDeserializer;
};
然后声明各种具体的dispatcher:
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 可变参数模板可以做到这一点吗?我已经阅读了一些关于它们的内容,似乎递归使用了很多。
【问题讨论】:
-
从哪里获得字符串、int、some-class 和 int,例如,从哪里获得?我的
stream_function(找到here)可能会有所帮助。 -
已编辑以使反序列化器的使用更加清晰。反序列化器本身就是黑盒代码。