Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <functional>
- #include <memory>
- class QTRO_1Source {
- public:
- void hvEnabledChanged(bool) {};
- virtual bool hvEnabled() const = 0;
- };
- class QTRO_1SimpleSource : public QTRO_1Source {
- public:
- bool hvEnabled() const override { return false; }
- };
- class QTRO_1 : public QTRO_1SimpleSource {
- public:
- void write_hvEnabled(bool/*enabled*/) { }
- };
- template<typename ReplicaType, typename ValueType>
- class ProxyProperty
- {
- public:
- using ReadFuncPtr = ValueType (ReplicaType::*)() const;
- using WriteFuncPtr = void (ReplicaType::*)(ValueType);
- using ChangeSigFuncPtr = void (ReplicaType::*)(ValueType);
- using UpdateHandlerFunctor = std::function<void(ValueType value)>;
- ProxyProperty(ReplicaType *replica,
- ReadFuncPtr readFunc,
- WriteFuncPtr writeFunc,
- ChangeSigFuncPtr changeSignal,
- UpdateHandlerFunctor updateHandler)
- {
- m_replica = replica;
- m_readFunc = readFunc;
- m_writeFunc = writeFunc;
- m_changeSignal = changeSignal;
- m_updateHandler = updateHandler;
- }
- template<typename T, typename HandlerT>
- void write(T value, HandlerT handler) {
- (m_replica->*m_writeFunc)(value);
- }
- private:
- ReplicaType *m_replica;
- ReadFuncPtr m_readFunc;
- WriteFuncPtr m_writeFunc;
- ChangeSigFuncPtr m_changeSignal;
- UpdateHandlerFunctor m_updateHandler;
- int m_timeout{3000};
- };
- template<typename ReplicaType, typename ValueType, typename UpHandlerT>
- auto createProxyProperty(ReplicaType *replica,
- ValueType (ReplicaType::*readFunc)() const,
- void (ReplicaType::*writeFunc)(ValueType),
- void (ReplicaType::*changeSignal)(ValueType),
- UpHandlerT upHandler)
- {
- return std::make_unique<ProxyProperty<ReplicaType,ValueType> >(replica, readFunc, writeFunc, changeSignal, upHandler);
- }
- int main(int argc, char *argv[]){
- QTRO_1 model;
- // static auto p = createProxyProperty<QTRO_1, bool>(
- static auto p = createProxyProperty(
- &model,
- &QTRO_1::hvEnabled,
- &QTRO_1::write_hvEnabled,
- &QTRO_1::hvEnabledChanged,
- [](auto val) { std::cout<< "COSTAM"; }
- );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement