У меня есть объект-планировщик class-. В этом классе планировщика указываются указатели на функции, время и указатель на объект, который создал планировщик.
Это означает, что я мог бы сделать что-то такое: (pObject->*h.function)(*h.param);
Где pObject - это указатель на исходный объект, h класс, который содержит указатель function
+ void parameter
, поэтому я могу передать аргументы исходной функции.
Когда мне нравится инициализировать этот объект, у меня есть конструктор explicit Scheduler(pObjType o);
(где pObjType является параметром шаблона).Получить (указатель на) вызывающий объект
Когда я создаю объект, который должен иметь этот сигнал тревоги I типа:
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) класс получит неопределенное поведение. Планировщик будет указывать на исходный объект, и этот исходный объект может выйти из сферы действия или, что еще хуже, может и не быть.
Есть ли способ, который при копировании моего будильника (по умолчанию, так что в конструкторе-копии планировщика) я могу получить вызывающий объект (и указатель на это?)?
Или, если это невозможно, можно ли выбросить (скомпилировать) ошибку, если я забуду реализовать экземпляр-конструктор для своей структуры? - И попытаться скопировать эту структуру где-нибудь?
Проблема с 1. заключается в том, что это * функции-члены * в настоящее время. Но позже я хочу расширить его и, возможно, дать дескрипторы (LUA) скриптов, чтобы они могли быть настроены на уровне дизайна вместо уровня двигателя. Проблема с 2 заключается в том, что я действительно НЕОБХОДИМО копировать, но поскольку нет другого требования к конструктору-конструктору, отличному от используемого по умолчанию (я разработал все, чтобы это не было необходимо), я надеялся предотвратить необходимость здесь. – paul23 2010-11-25 12:07:10