/* * LateBindingValue.hpp * * Created on: 28 сент. 2020 г. * Author: LeonidTitov */ #ifndef UMLIBRARY_SCHEMATIC_LATEBINDINGVALUE_HPP_ #define UMLIBRARY_SCHEMATIC_LATEBINDINGVALUE_HPP_ #include "../systemic/IValue.hpp" namespace schematic { template class LateBindingValue : public systemic::IValue { T default_value; systemic::IValue * binded_value; public: LateBindingValue( T default_value ); void bind( systemic::IValue * ); operator T() const; }; } template inline schematic::LateBindingValue::LateBindingValue( T default_value ) : default_value(default_value), binded_value(nullptr) {} template inline void schematic::LateBindingValue::bind( systemic::IValue * value ) { binded_value = value; } template inline schematic::LateBindingValue::operator T() const { return binded_value ? *binded_value : default_value; } #endif /* UMLIBRARY_SCHEMATIC_LATEBINDINGVALUE_HPP_ */