PIP 5.5.3
Platform-Independent Primitives
Классы | Открытые члены | Открытые статические члены | Защищенные члены | Относящиеся к классу функции | Полный список членов класса
Класс PIObject

Этот класс является базовым для использования механизма события -> обработчики. Подробнее...

#include <piobject.h>

Граф наследования:PIObject:
Inheritance graph
[см. легенду]

Классы

class  Connection
 Вспомогательный класс для получения информации об успешности соединения и возможности его разрыва. Подробнее...
 

Открытые члены

 PIObject (const PIString &name=PIString())
 Создает PIObject с именем "name".
 
PIString name () const
 Возвращает имя объекта
 
virtual const char * className () const
 Возвращает имя класса объекта
 
virtual const char * parentClassName () const
 Возвращает имя родительского класса
 
bool debug () const
 Возвращает включен ли вывод piCoutObj для этого объекта
 
void setName (const PIString &name)
 Устанавливает имя объекта
 
void setDebug (bool debug)
 Включает или отключает вывод piCoutObj для этого объекта
 
PIVariant property (const char *name) const
 Возвращает свойство объекта по имени "name".
 
void setProperty (const char *name, const PIVariant &value)
 Устанавливает у объекта свойство по имени "name" в "value". Если такого свойства нет, оно добавляется
 
bool isPropertyExists (const char *name) const
 Возвращает присутствует ли свойство по имени "name".
 
PIStringList scopeList () const
 Возвращает цепочку наследования объекта (вместе с классом самого объекта)
 
void piDisconnect (const PIString &sig, PIObject *dest, void *ev_h)
 Разрывает все соединения от события "sig" к объекту "dest" и обработчику "ev_h".
 
void piDisconnect (const PIString &sig, PIObject *dest)
 Разрывает все соединения от события "sig" к объекту "dest".
 
void piDisconnect (const PIString &sig)
 Разрывает все соединения от события "sig".
 
bool isPIObject () const
 Возвращает действительный ли это PIObject (проверяет подпись)
 
template<typename T >
bool isTypeOf () const
 Возвращает действительный ли это наследник PIObject типа "T" (проверяет подпись и имя класса)
 
template<typename T >
T * cast () const
 Возвращает преобразование к типу T если это действительный наследник типа "T" (проверяет через isTypeOf()), или "nullptr".
 
void callQueuedEvents ()
 Выполнить все отложенные события от CONNECTU_QUEUED соединений
 
bool maybeCallQueuedEvents ()
 Если было хотя бы одно CONNECTU_QUEUED соединение с исполнителем this, то выполнить события Подробнее...
 
void deleteLater ()
 Пометить объект на удаление Подробнее...
 

Открытые статические члены

static void piDisconnect (PIObject *src, const PIString &sig, PIObject *dest, void *ev_h)
 Разрывает все соединения от события "sig" объекта "src" к объекту "dest" и обработчику "ev_h".
 
static void piDisconnect (PIObject *src, const PIString &sig, PIObject *dest)
 Разрывает все соединения от события "sig" объекта "src" к объекту "dest".
 
static void piDisconnect (PIObject *src, const PIString &sig)
 Разрывает все соединения от события "sig" объекта "src".
 
static PIObjectfindByName (const PIString &name)
 Returns PIObject* with name "name" or 0, if there is no object found.
 
static bool isPIObject (const PIObject *o)
 Возвращает действительный ли "o" PIObject (проверяет подпись)
 
template<typename T >
static bool isTypeOf (const PIObject *o)
 Возвращает действительный ли "o" наследник PIObject типа "T" (проверяет подпись и имя класса)
 

Защищенные члены

PIObjectemitter () const
 Возвращает PIObject* который вызвал это событие. Значение допустимо только из методов обработчиков событий
 
virtual void propertyChanged (const char *name)
 Виртуальная функция, вызывается после изменения любого свойства.
 

Относящиеся к классу функции

(не члены класса)

#define piCoutObj
 Макрос для условного (piDebug && PIObject::debug()) вывода в PICout(StdOut) для наследников PIObject.
 
#define piCerrObj
 Макрос для условного (piDebug && PIObject::debug()) вывода в PICout(StdErr) для наследников PIObject.
 
#define PIOBJECT(name)
 Необходимо использовать этот макрос после объявления класса для использования событийной системы и корректного вывода piCoutObj.
 
#define EVENT_HANDLER0(ret, name)   ret name()
 Объявляет обработчик событий с именем "name" и возвращаемым типом "ret", ret name()
 
#define EVENT_HANDLER1(ret, name, type0, var0)   ret name(type0 var0)
 Объявляет обработчик событий с именем "name" и возвращаемым типом "ret", ret name(type0 var0)
 
#define EVENT_HANDLER2(ret, name, type0, var0, type1, var1)   ret name(type0 var0, type1 var1)
 Объявляет обработчик событий с именем "name" и возвращаемым типом "ret", ret name(type0 var0, type1 var1)
 
#define EVENT_HANDLER3(ret, name, type0, var0, type1, var1, type2, var2)   ret name(type0 var0, type1 var1, type2 var2)
 Объявляет обработчик событий с именем "name" и возвращаемым типом "ret", ret name(type0 var0, type1 var1, type2 var2)
 
#define EVENT_HANDLER4(ret, name, type0, var0, type1, var1, type2, var2, type3, var3)    ret name(type0 var0, type1 var1, type2 var2, type3 var3)
 Объявляет обработчик событий с именем "name" и возвращаемым типом "ret", ret name(type0 var0, type1 var1, type2 var2, type3 var3)
 
#define EVENT_HANDLER   EVENT_HANDLER0
 Аналог EVENT_HANDLER0.
 
#define EVENT_VHANDLER0(ret, name)   virtual ret name()
 Объявляет виртуальный обработчик событий с именем "name" и возвращаемым типом "ret", virtual ret name()
 
#define EVENT_VHANDLER1(ret, name, type0, var0)   virtual ret name(type0 var0)
 Объявляет виртуальный обработчик событий с именем "name" и возвращаемым типом "ret", virtual ret name(type0 var0)
 
#define EVENT_VHANDLER2(ret, name, type0, var0, type1, var1)   virtual ret name(type0 var0, type1 var1)
 Объявляет виртуальный обработчик событий с именем "name" и возвращаемым типом "ret", virtual ret name(type0 var0, type1 var1)
 
#define EVENT_VHANDLER3(ret, name, type0, var0, type1, var1, type2, var2)   virtual ret name(type0 var0, type1 var1, type2 var2)
 Объявляет виртуальный обработчик событий с именем "name" и возвращаемым типом "ret", virtual ret name(type0 var0, type1 var1, type2 var2)
 
#define EVENT_VHANDLER4(ret, name, type0, var0, type1, var1, type2, var2, type3, var3)    virtual ret name(type0 var0, type1 var1, type2 var2, type3 var3)
 Объявляет виртуальный обработчик событий с именем "name" и возвращаемым типом "ret", virtual ret name(type0 var0, type1 var1, type2 var2, type3 var3)
 
#define EVENT_VHANDLER   EVENT_VHANDLER0
 Аналог EVENT_VHANDLER0.
 
#define EVENT0(name)   void name();
 Объявляет событие с именем "name", void name();.
 
#define EVENT1(name, type0, var0)   void name(type0 var0);
 Объявляет событие с именем "name", void name(type0 var0);.
 
#define EVENT2(name, type0, var0, type1, var1)   void name(type0 var0, type1 var1);
 Объявляет событие с именем "name", void name(type0 var0, type1 var1);.
 
#define EVENT3(name, type0, var0, type1, var1, type2, var2)   void name(type0 var0, type1 var1, type2 var2);
 Объявляет событие с именем "name", void name(type0 var0, type1 var1, type2 var2);.
 
#define EVENT4(name, type0, var0, type1, var1, type2, var2, type3, var3)   void name(type0 var0, type1 var1, type2 var2, type3 var3);
 Объявляет событие с именем "name", void name(type0 var0, type1 var1, type2 var2, type3 var3);.
 
#define EVENT   EVENT0
 Аналог EVENT0.
 
#define CONNECTU(src, event, dest, handler)
 Соединяет событие "event" объекта "src" к обработчику или событию "handler" объекта "dest". Подробнее...
 
#define CONNECTU_QUEUED(src, event, dest, handler, performer)
 Соединяет событие "event" объекта "src" к обработчику или событию "handler" объекта "dest". Подробнее...
 
#define CONNECTL(src, event, functor)
 Соединяет событие "event" объекта "src" к лямбда-функции "functor". Подробнее...
 
#define CONNECT0(ret, src, event, dest, handler)
 Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" с проверкой наличия события и обработчика. Подробнее...
 
#define CONNECT1(ret, type0, src, event, dest, handler)
 Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" с проверкой наличия события и обработчика. Подробнее...
 
#define CONNECT2(ret, type0, type1, src, event, dest, handler)
 Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" с проверкой наличия события и обработчика. Подробнее...
 
#define CONNECT3(ret, type0, type1, type2, src, event, dest, handler)
 Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" с проверкой наличия события и обработчика. Подробнее...
 
#define CONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler)
 Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" с проверкой наличия события и обработчика. Подробнее...
 
#define CONNECT   CONNECT0
 Аналог CONNECT0. Подробнее...
 
#define WEAK_CONNECT0(ret, src, event, dest, handler)
 Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" без проверки наличия события и обработчика. Подробнее...
 
#define WEAK_CONNECT1(ret, type0, src, event, dest, handler)
 Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" без проверки наличия события и обработчика. Подробнее...
 
#define WEAK_CONNECT2(ret, type0, type1, src, event, dest, handler)
 Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" без проверки наличия события и обработчика. Подробнее...
 
#define WEAK_CONNECT3(ret, type0, type1, type2, src, event, dest, handler)
 Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" без проверки наличия события и обработчика. Подробнее...
 
#define WEAK_CONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler)
 Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" без проверки наличия события и обработчика. Подробнее...
 
#define WEAK_CONNECT   WEAK_CONNECT0
 Аналог WEAK_CONNECT0. Подробнее...
 
#define DISCONNECT0(ret, src, event, dest, handler)
 piDisconnect событие "event" объекта "src" от обработчика или события "handler" с возвращаемым типом "ret" объекта "dest"
 
#define DISCONNECT1(ret, type0, src, event, dest, handler)
 piDisconnect событие "event" объекта "src" от обработчика или события "handler" с возвращаемым типом "ret" объекта "dest"
 
#define DISCONNECT2(ret, type0, type1, src, event, dest, handler)
 piDisconnect событие "event" объекта "src" от обработчика или события "handler" с возвращаемым типом "ret" объекта "dest"
 
#define DISCONNECT3(ret, type0, type1, type2, src, event, dest, handler)
 piDisconnect событие "event" объекта "src" от обработчика или события "handler" с возвращаемым типом "ret" объекта "dest"
 
#define DISCONNECT4(ret, type0, type1, type2, type3, src, event, dest, handler)
 piDisconnect событие "event" объекта "src" от обработчика или события "handler" с возвращаемым типом "ret" объекта "dest"
 
#define DISCONNECT   DISCONNECT0
 Аналог DISCONNECT0.
 
#define HANDLER(handler)
 Возвращает указатель на обработчик события "handler".
 

Events

void deleted (PIObject *o)
 Вызывается перед удалением объекта Подробнее...
 

Подробное описание

Этот класс является базовым для использования механизма события -> обработчики.

События и Обработчики событий

PIObject предоставляет механизм событий и их обработчиков, реализованный без дополнительного препроцессора или метакомпилятора. Любой класс, наследованный от PIObject должен использовать макрос PIOBJECT() сразу после объявления класса для корректной работы.

Событием является сигнал, который может быть вызван как обычный метод в любое время. Это метод, объявленный с помощью макроса EVENT() и не требует описания. Для его вызова просто вызывается метод события.

Обработчик события это метод, объявленный с помощью макроса EVENT_HANDLER() и он требует описания, как и обычный метод. Можно его использовать как обычный метод.

Основной функцией этого механизма является реализация соединений между различными объектами. Её предоставляют макросы CONNECT(), CONNECTU() и CONNECTL(), которые соединяют события одних объектов с обработчиками или событиями других объектов. Каждое событие может быть присоеденино неограниченное количество раз к любым обработчикам.

Пример:

class ObjectA: public PIObject {
PIOBJECT(ObjectA)
public:
EVENT_HANDLER1(void, handlerA, const PIString & , str) {piCoutObj << "handler A:" << str;}
EVENT1(eventA1, const PIString & , str);
EVENT2(eventA2, int, i, float, f);
};
class ObjectB: public PIObject {
PIOBJECT(ObjectB)
public:
EVENT_HANDLER2(void, handlerB, int, i, float, f) {piCoutObj << "handler B:" << i << "," << f;}
EVENT1(eventB, PIString, str);
};
int main(int argc, char * argv[]) {
ObjectA obj_a;
ObjectB obj_b;
CONNECT2(void, int, float, &obj_a, eventA2, &obj_b, handlerB);
obj_a.eventA2(2, 0.5);
CONNECT1(void, PIString, &obj_b, eventB, &obj_a, handlerA);
obj_b.eventB("event to handler");
CONNECTU(&obj_a, eventA1, &obj_b, eventB);
obj_a.eventA1("event to event");
obj_a.piDisconnect("eventA1");
CONNECTL(&obj_a, eventA1, ([](const PIString & str){piCout << str;}));
obj_a.eventA1("event to lambda");
};
Этот класс является базовым для использования механизма события -> обработчики.
Definition: piobject.h:41
#define CONNECT1(ret, type0, src, event, dest, handler)
Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret...
Definition: piobject_macros.h:244
#define EVENT_HANDLER1(ret, name, type0, var0)
Объявляет обработчик событий с именем "name" и возвращаемым типом "ret", ret name(type0 var0)
Definition: piobject_macros.h:57
#define EVENT1(name, type0, var0)
Объявляет событие с именем "name", void name(type0 var0);.
Definition: piobject_macros.h:138
#define piCoutObj
Макрос для условного (piDebug && PIObject::debug()) вывода в PICout(StdOut) для наследников PIObject.
Definition: picout.h:44
#define CONNECTL(src, event, functor)
Соединяет событие "event" объекта "src" к лямбда-функции "functor".
Definition: piobject_macros.h:218
#define CONNECT2(ret, type0, type1, src, event, dest, handler)
Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret...
Definition: piobject_macros.h:257
#define EVENT2(name, type0, var0, type1, var1)
Объявляет событие с именем "name", void name(type0 var0, type1 var1);.
Definition: piobject_macros.h:144
#define EVENT_HANDLER2(ret, name, type0, var0, type1, var1)
Объявляет обработчик событий с именем "name" и возвращаемым типом "ret", ret name(type0 var0,...
Definition: piobject_macros.h:63
#define CONNECTU(src, event, dest, handler)
Соединяет событие "event" объекта "src" к обработчику или событию "handler" объекта "dest".
Definition: piobject_macros.h:184
#define PIOBJECT(name)
Необходимо использовать этот макрос после объявления класса для использования событийной системы и ко...
Definition: piobject_macros.h:38
Класс строки.
Definition: pistring.h:42
#define piCout
Макрос для условного (piDebug) вывода в PICout(StdOut)
Definition: picout.h:35

Результат:

handler B: 2 , 0.5
handler A: event to handler
handler A: event to event
event to lambda

Методы

◆ maybeCallQueuedEvents()

bool PIObject::maybeCallQueuedEvents ( )
inline

Если было хотя бы одно CONNECTU_QUEUED соединение с исполнителем this, то выполнить события

Этот метод более оптимален, чем callQueuedEvents(), для объектов, которые не были в роли "performer" в макросе CONNECTU_QUEUED

◆ deleteLater()

void PIObject::deleteLater ( )

Пометить объект на удаление

При первом вызове стартует фоновый поток для удаления объектов. Каждый объект из очереди удаляется только когда выйдет из всех событий и обработок.

◆ deleted()

void PIObject::deleted ( PIObject o)

Вызывается перед удалением объекта

Предупреждения

Это событие вызывается из деструктора, поэтому используйте только численное значение "o", не надо кастовать его в другие типы!

Документация по друзьям класса и функциям, относящимся к классу

◆ CONNECTU

#define CONNECTU (   src,
  event,
  dest,
  handler 
)
related

Соединяет событие "event" объекта "src" к обработчику или событию "handler" объекта "dest".

"handler" может принимать не все аргументы от "event". Возвращает PIObject::Connection

◆ CONNECTU_QUEUED

#define CONNECTU_QUEUED (   src,
  event,
  dest,
  handler,
  performer 
)
related

Соединяет событие "event" объекта "src" к обработчику или событию "handler" объекта "dest".

"handler" может принимать не все аргументы от "event". Обработчик будет вызван объектом "performer" при вызове PIObject::callQueuedEvents(). Все типы аргументов должны быть зарегистрированы с помощью макроса REGISTER_VARIANT(), однако многие стандартные и PIP типы уже там. Возвращает PIObject::Connection

◆ CONNECTL

#define CONNECTL (   src,
  event,
  functor 
)
related

Соединяет событие "event" объекта "src" к лямбда-функции "functor".

"event" и "functor" должны иметь одинаковые аргументы. В случае сложной лямбда-функции оберните её (). Возвращает PIObject::Connection

◆ CONNECT0

#define CONNECT0 (   ret,
  src,
  event,
  dest,
  handler 
)
related

Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" с проверкой наличия события и обработчика.

Уст.:
Используйте CONNECTU()

Returns PIObject::Connection

◆ CONNECT1

#define CONNECT1 (   ret,
  type0,
  src,
  event,
  dest,
  handler 
)
related

Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" с проверкой наличия события и обработчика.

Уст.:
Используйте CONNECTU()

Returns PIObject::Connection

◆ CONNECT2

#define CONNECT2 (   ret,
  type0,
  type1,
  src,
  event,
  dest,
  handler 
)
related

Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" с проверкой наличия события и обработчика.

Уст.:
Используйте CONNECTU()

Returns PIObject::Connection

◆ CONNECT3

#define CONNECT3 (   ret,
  type0,
  type1,
  type2,
  src,
  event,
  dest,
  handler 
)
related

Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" с проверкой наличия события и обработчика.

Уст.:
Используйте CONNECTU()

Returns PIObject::Connection

◆ CONNECT4

#define CONNECT4 (   ret,
  type0,
  type1,
  type2,
  type3,
  src,
  event,
  dest,
  handler 
)
related

Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" с проверкой наличия события и обработчика.

Уст.:
Используйте CONNECTU()

Returns PIObject::Connection

◆ CONNECT

#define CONNECT   CONNECT0
related

Аналог CONNECT0.

Уст.:
Используйте CONNECTU()

◆ WEAK_CONNECT0

#define WEAK_CONNECT0 (   ret,
  src,
  event,
  dest,
  handler 
)
related

Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" без проверки наличия события и обработчика.

Уст.:
Используйте CONNECTU()

◆ WEAK_CONNECT1

#define WEAK_CONNECT1 (   ret,
  type0,
  src,
  event,
  dest,
  handler 
)
related

Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" без проверки наличия события и обработчика.

Уст.:
Используйте CONNECTU()

◆ WEAK_CONNECT2

#define WEAK_CONNECT2 (   ret,
  type0,
  type1,
  src,
  event,
  dest,
  handler 
)
related

Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" без проверки наличия события и обработчика.

Уст.:
Используйте CONNECTU()

◆ WEAK_CONNECT3

#define WEAK_CONNECT3 (   ret,
  type0,
  type1,
  type2,
  src,
  event,
  dest,
  handler 
)
related

Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" без проверки наличия события и обработчика.

Уст.:
Используйте CONNECTU()

◆ WEAK_CONNECT4

#define WEAK_CONNECT4 (   ret,
  type0,
  type1,
  type2,
  type3,
  src,
  event,
  dest,
  handler 
)
related

Соединяет событие "event" объекта "src" к обработчику или событию "handler" с возвращаемым типом "ret" объекта "dest" без проверки наличия события и обработчика.

Уст.:
Используйте CONNECTU()

◆ WEAK_CONNECT

#define WEAK_CONNECT   WEAK_CONNECT0
related

Аналог WEAK_CONNECT0.

Уст.:
Используйте CONNECTU()