Skip to content

Instantly share code, notes, and snippets.

@rokups
Created February 25, 2019 07:41
Show Gist options
  • Save rokups/02370944aa3da08dc54ac202b8e60118 to your computer and use it in GitHub Desktop.
Save rokups/02370944aa3da08dc54ac202b8e60118 to your computer and use it in GitHub Desktop.
#include <functional>
template<typename T>
struct Property
{
Property(T& value)
{
_setter = [&value](T new_value) { value = new_value; }
_getter = [&value]() { return value; }
}
Property(std::function<T()> getter, std::function<void(T)> setter = std::function<void(T)>())
{
_setter = setter;
_getter = getter;
}
T operator() { return _getter(); }
Property& operator=(T value) { _setter(value); }
std::function<T()> _getter;
std::function<void(T)> _setter;
};
struct Foo
{
Property<int> int_prop{ _number };
Property<int> int_prop2{
[this]() {
return _number;
},
[this](int value) {
_number = value;
}
};
private:
int _number;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment