diff options
author | hop311 <hop3114@gmail.com> | 2024-02-04 15:08:32 +0100 |
---|---|---|
committer | hop311 <hop3114@gmail.com> | 2024-02-04 15:08:32 +0100 |
commit | 3f6d7351816b0e089495b2f15dc1c956f3151f5a (patch) | |
tree | 606aacf5861d3897f102917cc3af1d6be3471f9f /src/openvic-simulation/utility/Getters.hpp | |
parent | 068c13ede817d17df599ca3481261bf17ed95604 (diff) |
Reworked ReturnByValue, warn_or_error, expect_date_[identifier_or_]string
Diffstat (limited to 'src/openvic-simulation/utility/Getters.hpp')
-rw-r--r-- | src/openvic-simulation/utility/Getters.hpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/openvic-simulation/utility/Getters.hpp b/src/openvic-simulation/utility/Getters.hpp index 33aa5a2..fa76e74 100644 --- a/src/openvic-simulation/utility/Getters.hpp +++ b/src/openvic-simulation/utility/Getters.hpp @@ -51,13 +51,15 @@ public: \ ACCESS: namespace OpenVic { - /* Any struct extending ReturnByValueProperty will be returned by value by PROPERTY-generated getter functions, + /* Any struct tagged with ov_return_by_value will be returned by value by PROPERTY-generated getter functions, * instead of by const reference as structs are by default. Use this for small structs which don't contain any - * dynamically allocated memory, e.g. Date and fixed_point_t. */ - struct ReturnByValueProperty { - constexpr bool operator==(ReturnByValueProperty const&) const = default; - constexpr std::strong_ordering operator<=>(ReturnByValueProperty const&) const = default; - }; + * dynamically allocated memory, e.g. dates and colours. The tag must be public, as in the example below: + * + * public: + * using ov_return_by_value = void; + */ + template<typename T> + concept ReturnByValue = requires { typename T::ov_return_by_value; }; /* * Template function used to choose the return type and provide the implementation @@ -72,7 +74,7 @@ namespace OpenVic { /* Return std::string_view looking at std::string */ return std::string_view { property }; } else if constexpr ( - std::integral<T> || std::floating_point<T> || std::is_enum_v<T> || std::derived_from<T, ReturnByValueProperty> + std::integral<T> || std::floating_point<T> || std::is_enum_v<T> || ReturnByValue<T> ) { /* Return value */ return T { property }; |