像本机类型一样,没有隐式转换的整型
Integral type that acts like a native one without implicit conversions
我试图实现一个完美的整型,没有隐式转换到其底层类型(仅显式),并且我遇到以下问题:
std::array<Integral, 10>a{{...}};
Integral index{5};
a[index] = ...; //error: no implicit conversion between Integral and std::size_t
对于C数组也有类似的问题。我想问题是operator[]
期望一个特定的类型。如果您的类型与预期的类型不匹配,并且不能隐式转换为它,我能想到的唯一解决方案是显式强制转换、getter和应用于数组的get
函数。
是否有可能实现类似于explicit operator bool
的东西(即在特定情况下仅隐式转换),但operator[]
?
写a[static_cast<std::size_t>(index)]
有点违背了写整型的目的
是否有可能实现类似于
explicit operator bool
的东西(即在特定情况下仅隐式转换)
这被称为上下文转换为 bool
,并且仅支持bool
类型。所以,不,这是不可能的。
Integral::get() const
)是可行的方法。毕竟,除非您试图创建一个实际上无用的类型,否则可能会有一些您的类可以表示的值不能存储在int
中,这意味着转换将不得不抛出异常而失败。
几点思考:
a)可以实现对size_t的隐式转换。我相信操作符[]期望这种类型。这将捕获所有不指向size_t的转换。
注意,这种显式转换可用于捕获正在使用负索引的情况。一个有用的行为。
b)可以重载操作符[]来接受整型。当然,这将是一个痛苦的过程,因为您必须对所有类型都这样做。但另一方面,您可能能够在容器上实现索引检查——另一个有用的功能。
c)你可能会查找"安全数字"的一些外围相关的想法。
罗伯特·Ramey相关文章:
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- JNI 日期值转换问题,在C++中获取不同的长整型值
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 将最小值整数转换为无符号长整型
- 如何将小端格式的QByteArray转换为无符号长整型
- 将整型转换为浮点型时检测溢出
- 是否存在将长整型转换为指针有效的情况
- 将字符串中以十六进制形式存储的负长整型值转换为 C++ 中的长整型变量
- 错误:请求从 std::chrono::time_point 浮点数转换为非标量类型长整型
- 如何以优雅高效的方式将无符号/有符号整数/长整型转换为 C 字符串?
- 将 BYTE 数组转换为无符号长整型
- 如何在 c++ 中将十六进制字符串转换为长整型字符串
- C++ :如何从 JSON 获取长整型值并将其转换为 time_point
- 将C++整型模板参数转换为整型"longer"型
- 如何使用 avx 指令将浮点数向量转换为短整型?
- 将字符串转换为长整型
- C++ 从文件中读取字符,转换为长整型
- iOS - 隐式转换将整数精度"size_t"(也称为"无符号长整型")丢失为&
- C++:将无符号长整型长整型转换为无符号长整型