#pragma once #include #include "sixtyfps_properties_internal.h" namespace sixtyfps { template struct Property { Property() { internal::sixtyfps_property_init(&inner); } ~Property() { internal::sixtyfps_property_drop(&inner); } Property(const Property &) = delete; Property(Property &&) = delete; Property &operator=(const Property &) = delete; /* Should it be implicit? void operator=(const T &value) { set(value); }*/ void set(const T &value) const { this->value = value; } const T &get() const { internal::sixtyfps_property_update(&inner, &value); return value; } template void set_binding(F binding) const { internal::sixtyfps_property_set_binding( &inner, [](void *user_data, const void *value) { *reinterpret_cast(value) = (*reinterpret_cast(user_data))(); }, new F(binding), [](void *user_data) { delete reinterpret_cast(user_data); }); } private: internal::PropertyHandleOpaque inner; mutable T value; }; }