#pragma once #include #include namespace mbgl { namespace style { class Undefined {}; template class PropertyValue { private: using Value = variant>; Value value; public: PropertyValue() : value() {} PropertyValue( T constant) : value(constant) {} PropertyValue(Function function) : value(function) {} bool isUndefined() const { return value.which() == 0; } bool isConstant() const { return value.which() == 1; } bool isFunction() const { return value.which() == 2; } const T & asConstant() const { return value.template get< T >(); } const Function& asFunction() const { return value.template get>(); } explicit operator bool() const { return !isUndefined(); }; template static auto visit(const PropertyValue& value, Visitor&& visitor) { return Value::visit(value.value, visitor); } }; } // namespace style } // namespace mbgl