#include #include #include #include using namespace structive; #define REQUIRE(expression) do { if (!(expression)) { std::fprintf(stderr, "REQUIRE failed: %s:%d: %s\n", __FILE__, __LINE__, #expression); std::abort(); } } while (false) struct Device : Property_Object { int temperature{20}; int pressure{100}; }; template <> struct structive::Type_Descriptor { static auto get() { return object( defaults(external_access, presentation::group < "Environment" >), field < &Device::temperature > (key < "temperature" >, presentation::label < "Temperature" >, presentation::order < 2 >), field < &Device::pressure > (key < "pressure" >) ); } }; int main() { Device device; const auto& temperature = device.schema().property<&Device::temperature>(); static_assert(std::remove_cvref_t::template has_attribute); auto temperature_info = presentation::describe < &Device::temperature > (device.schema()); auto pressure_info = presentation::describe < &Device::pressure > (device.schema()); REQUIRE(temperature_info.label == "Temperature"); REQUIRE(temperature_info.order == 2); REQUIRE(temperature_info.has_order); REQUIRE(pressure_info.label == "pressure"); REQUIRE(pressure_info.group == "Environment"); return 0; }