值的包装器,可以存放任意类型的值,类似于 std::any。
class KwargsValue;| 名称 | 描述 |
|---|---|
KwargsValue() |
空的构造函数。 |
KwargsValue(const KwargsValue&) |
拷贝函数。 |
KwargsValue(KwargsValue&&) |
移动函数。 |
KwargsValue(const _Tp&) |
存储一个 _Tp 类型的值或指向他的指针。 |
KwargsValue(_Tp&&) |
存储一个 _Tp 类型的值,将触发移动语义。 |
KwargsValue(const char (&)[_Size]) |
字符串字面量的偏特化构造函数,内部存储它的首地址。 |
| 名称 | 描述 |
|---|---|
~KwargsValue |
析构函数。 |
| 名称 | 描述 |
|---|---|
typeName |
获取最后一次调用构造函数时 _Tp 的字符串形式,不同的编译器可能有不同的结果。 |
typeHashCode |
获取最后一次调用构造函数时 _Tp 的哈希值,通过 std::type_info::hash_code() 进行计算。 |
valueTypeHashCode |
获取最后一次调用构造函数时 _Tp 的 value_type 类型的哈希值,如果不存在 _Tp::value_type,则同 typeHashCode()。 |
hasValueType |
检查最后一次调用构造函数时 _Tp 是否存在 value_type,如果存在,返回 true,否则,返回 false。 |
isSameType |
检查最后一次调用构造函数时 _Tp 是否是指定的类型,如果和指定的类型相同,返回 true,否则,返回 false。 |
isInteger |
检查最后一次调用构造函数时 _Tp 是否是整型或枚举类型,如果是,返回 true,否则,返回 false。 |
isRealNumber |
检查最后一次调用构造函数时 _Tp 是否是浮点型,如果是,返回 true,否则,返回 false。 |
isEnum |
检查最后一次调用构造函数时 _Tp 是否是枚举型,如果是,返回 true,否则,返回 false。 |
isStdArray |
检查最后一次调用构造函数时 _Tp 是否是 std::array,如果是,返回 true,否则,返回 false。 |
isIterable |
检查最后一次调用构造函数时 _Tp 是否是可迭代的容器类型,如果是,返回 true,否则,返回 false。 |
pointer |
获取指向内部存储值的指针,在解引用之前,请确保最后一次调用构造函数时 _Tp 类型的内存布局适用于当前的 _Tp 类型。 |
reference |
pointer() 的解引用。 |
value |
获取 _Tp 类型的内部存储值,允许和最后一次调用构造函数时 _Tp 类型不一致,不一致时尝试使用内置类型转换器进行转换。 |
size |
获取最后一次调用构造函数时 _Tp 的 sizeof(_Tp)。 |
| 名称 | 描述 |
|---|---|
operator= |
析构函数。 |
空的构造函数,默认包含一个 int 类型的值
constexpr KwargsValue() = default;使用任意类型的值进行构造,对于 结构体 或 共用体 或 大于
template<typename _Tp>
constexpr KwargsValue(const _Tp& __value) noexcept;使用任意类型的值进行构造,对于 结构体 或 共用体 或 大于 new 申请一个新对象,并使用 std::move() 进行资源的转移。
template<typename _Tp>
constexpr KwargsValue(_Tp&& __value);字符串字面量的偏特化构造函数,内部存储它的首地址。
template<std::size_t _Size>
constexpr KwargsValue(const char (&__value)[_Size]) noexcept;如果值是在构造函数中使用 new 申请的新对象,则调用该对象的 析构函数 并 delete 它。
_KWARGS_DESTRUCTOR_CONSTEXPR ~KwargsValue() noexcept;Tip
_KWARGS_DESTRUCTOR_CONSTEXPR 在 C++20 中被定义为 constexpr,在 C++17 中被定义为 inline。
获取最后一次调用构造函数时 _Tp 的字符串形式,不同的编译器可能有不同的结果。
constexpr std::string_view typeName() const noexcept;获取最后一次调用构造函数时 _Tp 的哈希值,通过 std::type_info::hash_code() 进行计算。
constexpr std::size_t typeHashCode() const noexcept;获取最后一次调用构造函数时 _Tp 的 value_type 类型的哈希值,如果不存在 _Tp::value_type,则同 typeHashCode()。
constexpr std::size_t valueTypeHashCode() const noexcept;检查最后一次调用构造函数时 _Tp 是否存在 value_type,如果存在,返回 true,否则,返回 false。
constexpr bool hasValueType() const noexcept;检查最后一次调用构造函数时 _Tp 是否是指定的类型,如果和指定的类型相同,返回 true,否则,返回 false。
template<typename _Tp>
constexpr bool isSameType() const noexcept;Tip
如果是枚举类型,将退化成底层类型,然后在进行类型比较。
检查最后一次调用构造函数时 _Tp 是否是整型或枚举类型,如果是,返回 true,否则,返回 false。
constexpr bool isInteger() const noexcept;检查最后一次调用构造函数时 _Tp 是否是浮点型,如果是,返回 true,否则,返回 false。
constexpr bool isRealNumber() const noexcept;检查最后一次调用构造函数时 _Tp 是否是枚举型,如果是,返回 true,否则,返回 false。
constexpr bool isEnum() const noexcept;检查最后一次调用构造函数时 _Tp 是否是 std::array,如果是,返回 true,否则,返回 false。
constexpr bool isStdArray() const noexcept;检查最后一次调用构造函数时 _Tp 是否是可迭代的容器类型,如果是,返回 true,否则,返回 false。
constexpr bool isIterable() const noexcept;[!TIP] 可迭代的容器类型 可迭代的容器类型具有成员函数
.begin()和.end()。
获取指向内部存储值的指针,在解引用之前,请确保最后一次调用构造函数时 _Tp 类型的内存布局适用于当前的 _Tp 类型。
template<typename _Tp>
constexpr _Tp* pointer() noexcept;
template<typename _Tp>
constexpr const _Tp* pointer() const noexcept;pointer() 的解引用。
template<typename _Tp>
constexpr _Tp& reference() noexcept
{ return *pointer<_Tp>(); }
template<typename _Tp>
constexpr const _Tp& reference() const noexcept
{ return *pointer<_Tp>(); }获取 _Tp 类型的内部存储值,允许和最后一次调用构造函数时 _Tp 类型不一致,不一致时尝试使用内置类型转换器进行转换。
template<typename _Tp>
constexpr std::enable_if_t<..., _Tp> value() const noexcept;Note
由于 类型擦除,内部不支持直接调用拷贝函数生成对象副本。
Warning
如果转换失败则会调用 assert() 引发崩溃,如果定义了 NODEBUG 宏,则会返回 _Tp()。
获取最后一次调用构造函数时 _Tp 的 sizeof(_Tp)。
特别的,如果 _Tp 是一个字符串字面量类型,则返回字符个数。
constexpr std::uint32_t size() const noexcept;对内部存储值做拷贝或移动,当前最后一次调用构造函数时的 _Tp 类型也将被重新定义为 __other 最后一次调用构造函数时的 _Tp 类型。
constexpr KwargsValue& operator=(const KwargsValue& __other);
constexpr KwargsValue& operator=(KwargsValue&& __other) noexcept;