C++ (Qt)#include <iostream> using namespace std; template <class T, typename U>class Signal{public: Signal() { _obj = 0; _slot = 0; } void operator()(const U& val) { if (_obj) { (_obj->*_slot)(val); } } void connect(T *obj, void (T::*slot)(const U &)) { _obj = obj; _slot = slot; } private: T *_obj; void (T::*_slot)(const U &);}; template<class T>class Sender{public: Sender(){} Signal<T, int> signal; void run() { signal(123); }}; class Receiver{public: Receiver() {} void slot(const int &x) { cout << x << endl; }}; int main(){ Sender<Receiver> sender; Receiver receiver; sender.signal.connect(&receiver, &Receiver::slot); sender.run(); return 0;}
airData._Va = airData._V = airData.V.Length(); if(airData._Va < 0.5) airData._Va = 0.5; airData.betaR = asin(airData.V.z/ airData._Va); if(fabs(airData.V.y) < 0.01 && fabs(airData.V.x) < 0.01) airData.alphaR = 0.; else airData.alphaR = atan2(airData.-V.y, airData.V.x); airData.alpha = airData.alphaR * M_C57; airData.beta = airData.betaR * M_C57;
почему бы не сделать один абстрактный класс, со статической функцией, а классы А и Б просто унаследовать от этого класса, ну а когда в классе А изменяется переменная, вызывать эту функцию
class A{public:static void qwerty();vitrual void doIt();}void A::qwerty(){void doIt();}class B : public A{private: int a;public:int set_a(int ab);}int B::set_a(int ab){a=ab;qwerty();}class C : public A{void doIt();}void C::doIt(){IamDoIt(); //это то что надо сделать}
class С {public: С(); ~Сe(); void addObserver(Observer *); //добавляет слушателя void notifyObservers(Observer * = 0); //оповещает слушателей, параметром является тот объект, который вызвал оповещение //этот параметр нужен для того, чтобы не запускать update самого себяprivate: QList<Observer *> * m_listObserver; //хранилище слушателей };void Observable::addObserver(Observer * o){ if(!m_listObserver->contains(o)) m_listObserver->append(o); }void Observable::notifyObservers(Observer * o){ for(int i=0; i<m_listObserver->count(); i++){ if(o!=m_listObserver->at(i)) m_listObserver->at(i)->update(this); }}