【发布时间】:2010-10-29 07:48:39
【问题描述】:
背景:
我有模板流运算符(例如 operator << (ostream &, std::vector <T>))(输出可能是某种 8 位整数类型的容器元素,(例如 unsigned char、int_least8_t 等)。
问题:
默认这些类型输出为char (ASCII)。
我只将char(或wchar_t 或其他)用于ASCII 变量,从不使用无符号/有符号类型。
如何让这些其他 8 位类型始终输出为 signed int / unsigned int(数字),即使调用者不知道类型?
第一次尝试:
我已经尝试(使用 GCC)例如定义 operator << (ostream &, unsigned char) 并在其中添加一个演员(即 stream << static_cast <int> (value)。这适用于 unsigned char 值,但随后 uint8_t 仍将输出为 char。
相同的底层类型(即unsigned/signed char 不能用于重载,因此我无法定义例如operator << (ostream &, int_fast8_t) 的重载。
【问题讨论】:
-
可以添加一些代码示例吗?
-
能否请您发布一些代码以便我们更好地理解?
-
你弄糊涂了……哎呀,评论太长了。编辑:在下面查看我的答案
-
对不起大家,希望现在更清楚了。
标签: c++ templates operator-overloading char cstdint