Я пытаюсь определить, подходит ли следующий сценарий для шаблона, и если да, то как это будет сделано.
У меня есть базовый класс, 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);
Но я не решаюсь сделать для этого макрос.
Поддерживают ли шаблоны переменнуюномера параметров?И если да, то как это сделать?