我在尝试确定以下场景是否适用于模板,如果是这样,将如何完成。模板是否支持可变数量的参数
我有一个基类event_base。它由特定类型的事件继承。
class event_base_c {
//... members common to all events ...
// serialize the class for transmision
virtual std::string serialize(void);
};
class event_motion_c : public event_base_c {
//... members for a motion event ...
// serialize the class for transmission
virtual std::string serialize(void);
};
class event_alarm_c : public event_base_c {
//... members for a motion event ...
// serialize the class for transmission
virtual std::string serialize(void);
};
活动得到初始化,并从一个不同的工艺发送到事件记录程序,它再现从串行化的数据的事件对象。
我的问题是关于发送事件的过程。我们不能在事件类中包含'send()'方法。我被告知我需要创建一个知道如何发送序列化事件的event_sender对象。所以,一个过程的代码可能是:
if (motion_detected on sensor1) {
event_motion_c Event(sensor1, x, y, z);
event_sender EventSender;
EventSender.report(Event.serialize());
}
虽然在其他一些过程可能会使用类似的代码,如报告报警:
if (alarm) {
event_alarm_c Event(alarm_id, alarm_type);
event_sender EventSender;
EventSender.report(Event.serialize());
}
这感觉就像一个模板候选给我,但什么停止/让我困惑的是,不同事件类的构造函数具有不同数量的参数。我不知道模板是否支持这样的事情,如果他们这样做,我不知道这样做的语法。
我可以很容易地将此定义一个宏,如:
#define SEND_EVENT(evt_class, args...) \
{ \
evt_class Event(#args); \
event_sender EventSender; \
\
EventSender.report(Event.serialize()); \
}
然后编码器就简单地使用:
SEND_EVENT(event_motion_c, sensor1, x, y, z);
和
SEND_EVENT(event_alarm_c, alarm_type);
但我很犹豫,使这是一个宏。
模板是否支持可变数量的参数?如果是这样,那是怎么做的?