mirror of
https://github.com/BlackMATov/meta.hpp.git
synced 2025-12-14 11:40:35 +07:00
parameter_index without name
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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<Parameter>(), std::move(name)};
|
||||
inline parameter_index parameter_index::make(std::size_t position) {
|
||||
return parameter_index{detail::resolve_type<Parameter>(), 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_;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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>(parameter_state{
|
||||
.index{parameter_index::make<Parameter>(std::move(name))},
|
||||
.index{parameter_index::make<Parameter>(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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user