diff --git a/headers/meta.hpp/meta_indices.hpp b/headers/meta.hpp/meta_indices.hpp index 74f18b8..7033a92 100644 --- a/headers/meta.hpp/meta_indices.hpp +++ b/headers/meta.hpp/meta_indices.hpp @@ -119,18 +119,18 @@ namespace meta_hpp public: parameter_index() = delete; [[nodiscard]] const any_type& get_type() const noexcept; - [[nodiscard]] const std::string& get_name() const noexcept; + [[nodiscard]] std::size_t get_position() const noexcept; private: friend detail::parameter_state; template < typename Parameter > - [[nodiscard]] static parameter_index make(std::string name); + [[nodiscard]] static parameter_index make(std::size_t position); private: - explicit parameter_index(any_type type, std::string name); + explicit parameter_index(any_type type, std::size_t position); friend bool operator<(const parameter_index& l, const parameter_index& r) noexcept; friend bool operator==(const parameter_index& l, const parameter_index& r) noexcept; private: any_type type_; - std::string name_; + std::size_t position_{}; }; class scope_index final { diff --git a/headers/meta.hpp/meta_indices/parameter_index.hpp b/headers/meta.hpp/meta_indices/parameter_index.hpp index d44bfc6..00b9d48 100644 --- a/headers/meta.hpp/meta_indices/parameter_index.hpp +++ b/headers/meta.hpp/meta_indices/parameter_index.hpp @@ -14,28 +14,28 @@ namespace meta_hpp { - inline parameter_index::parameter_index(any_type type, std::string name) + inline parameter_index::parameter_index(any_type type, std::size_t position) : type_{std::move(type)} - , name_{std::move(name)} {} + , position_{position} {} template < typename Parameter > - inline parameter_index parameter_index::make(std::string name) { - return parameter_index{detail::resolve_type(), std::move(name)}; + inline parameter_index parameter_index::make(std::size_t position) { + return parameter_index{detail::resolve_type(), position}; } inline const any_type& parameter_index::get_type() const noexcept { return type_; } - inline const std::string& parameter_index::get_name() const noexcept { - return name_; + inline std::size_t parameter_index::get_position() const noexcept { + return position_; } inline bool operator<(const parameter_index& l, const parameter_index& r) noexcept { - return l.type_ < r.type_ || (l.type_ == r.type_ && std::less<>{}(l.name_, r.name_)); + return l.type_ < r.type_ || (l.type_ == r.type_ && l.position_ < r.position_); } inline bool operator==(const parameter_index& l, const parameter_index& r) noexcept { - return l.type_ == r.type_ && std::equal_to<>{}(l.name_, r.name_); + return l.type_ == r.type_ && l.position_ == r.position_; } } diff --git a/headers/meta.hpp/meta_states.hpp b/headers/meta.hpp/meta_states.hpp index 1fb5005..71bf54f 100644 --- a/headers/meta.hpp/meta_states.hpp +++ b/headers/meta.hpp/meta_states.hpp @@ -461,8 +461,10 @@ namespace meta_hpp::detail struct parameter_state final { parameter_index index; + std::string name{}; + template < typename Parameter > - [[nodiscard]] static parameter_state_ptr make(std::string name); + [[nodiscard]] static parameter_state_ptr make(std::size_t position); }; struct scope_state final { diff --git a/headers/meta.hpp/meta_states/parameter.hpp b/headers/meta.hpp/meta_states/parameter.hpp index 4060458..e0cad8d 100644 --- a/headers/meta.hpp/meta_states/parameter.hpp +++ b/headers/meta.hpp/meta_states/parameter.hpp @@ -12,9 +12,9 @@ namespace meta_hpp::detail { template < typename Parameter > - inline parameter_state_ptr parameter_state::make(std::string name) { + inline parameter_state_ptr parameter_state::make(std::size_t position) { return std::make_shared(parameter_state{ - .index{parameter_index::make(std::move(name))}, + .index{parameter_index::make(position)}, }); } } @@ -41,7 +41,11 @@ namespace meta_hpp return state_->index.get_type(); } + inline std::size_t parameter::get_position() const noexcept { + return state_->index.get_position(); + } + inline const std::string& parameter::get_name() const noexcept { - return state_->index.get_name(); + return state_->name; } }