У меня есть объект - класс планировщика-. Этот класс планировщика получает указатели на функции-члены, время и указатель на объект, который создал планировщик.
Это означает, что я мог бы сделать что-то еще: (pObject->*h.function)(*h.param);
Где pObject - указатель на исходный объект, h класс, который содержит function
+ указатель void parameter
, поэтому я могу передавать аргументы исходной функции.
Когда мне нравится инициализировать этот объект, у меня есть конструктор explicit Scheduler(pObjType o);
(где pObjType - параметр шаблона).
Когда я создаю объект, который должен иметь этот сигнал, я печатаю:
struct A {
typedef void (A::*A_FN2)(void*);
typedef Scheduler<A*,A_FN2> AlarmType;
A(int _x) : alarm(NULL)
{
alarm.SetObject(this);
}
AlarmType alarm
Однако этот тип тревоги накладывает довольно большое ограничение на объект: если я забуду добавить конструктор копирования (к A ), класс получит неопределенное поведение. планировщик будет продолжать указывать на исходный объект, и этот исходный объект может выходить за рамки или, что еще хуже, может и не быть.
Есть ли метод, который, когда я копирую свою тревогу (по умолчанию, так в конструкторе копирования планировщика), я могу получить вызывающий объект (и указатель на это?)?
Или, если это невозможно, возможно ли выдать ошибку (компиляции), если я забуду реализовать конструктор копирования для моей структуры? - А попытаться скопировать эту структуру куда-нибудь?