y**b 发帖数: 10166 | 1 GCC quad precision math lib定义了一个数据类型__float128,
头文件为, 库名为libquadmath.so.
可是这个数据类型没有重载<<,输出时候有两个办法,一是调用某个函数转成
字符串进行输出,再一个就是进行类型转换(double)data再输出,可是对我
原有程序改动太大。有没有什么简单的办法比如重载<<?
ostream& operator << (ostream& os, const __float128 &r) {
os << (double)__float128;
return os;
} |
t****t 发帖数: 6806 | 2 你不都写好了吗?
【在 y**b 的大作中提到】 : GCC quad precision math lib定义了一个数据类型__float128, : 头文件为, 库名为libquadmath.so. : 可是这个数据类型没有重载<<,输出时候有两个办法,一是调用某个函数转成 : 字符串进行输出,再一个就是进行类型转换(double)data再输出,可是对我 : 原有程序改动太大。有没有什么简单的办法比如重载<<? : ostream& operator << (ostream& os, const __float128 &r) { : os << (double)__float128; : return os; : }
|
y**b 发帖数: 10166 | 3 可是我无法改动那个库吧?还是把这段代码放哪里都行?
【在 t****t 的大作中提到】 : 你不都写好了吗?
|
t****t 发帖数: 6806 | 4 那个库用了这个operator<<吗? 没有吧? 那你为什么要改那个库?
【在 y**b 的大作中提到】 : 可是我无法改动那个库吧?还是把这段代码放哪里都行?
|
y**b 发帖数: 10166 | 5 该库当然没有用到<<,所以我想重载<<. 它要是已经有了,我就省事了。
我试了一下,原贴中的代码可行,效果很好,省了无数手工修改其他代码的痛苦。
我想问的是:该库没有用到<<,我重载<<,没有影响到该库,而是在该库之外添加了
<<的定义,这是允许的,是吧?
我之所以有些糊涂,是因为以前重载<<都是在一个类的内部添加friend来进行,感觉
重载<<都要在原代码内部进行,而现在对__float128的代码一无所知,也能对它进行
<<重载?总觉得有些神奇。
谢谢。
【在 t****t 的大作中提到】 : 那个库用了这个operator<<吗? 没有吧? 那你为什么要改那个库?
|
t****t 发帖数: 6806 | 6 你要添加friend是因为你需要access private member. 如果不需要access private
member, 那有什么必要添加呢?
【在 y**b 的大作中提到】 : 该库当然没有用到<<,所以我想重载<<. 它要是已经有了,我就省事了。 : 我试了一下,原贴中的代码可行,效果很好,省了无数手工修改其他代码的痛苦。 : 我想问的是:该库没有用到<<,我重载<<,没有影响到该库,而是在该库之外添加了 : <<的定义,这是允许的,是吧? : 我之所以有些糊涂,是因为以前重载<<都是在一个类的内部添加friend来进行,感觉 : 重载<<都要在原代码内部进行,而现在对__float128的代码一无所知,也能对它进行 : <<重载?总觉得有些神奇。 : 谢谢。
|
A**u 发帖数: 2458 | 7 re
【在 t****t 的大作中提到】 : 你要添加friend是因为你需要access private member. 如果不需要access private : member, 那有什么必要添加呢?
|
y**b 发帖数: 10166 | 8 假设不需要access private member而重载<<, 以前也是在类的实现代码内部进行改动,
而现在对__float128一无所知亦可在外部改动,是不是还是有些差别?
【在 t****t 的大作中提到】 : 你要添加friend是因为你需要access private member. 如果不需要access private : member, 那有什么必要添加呢?
|
t****t 发帖数: 6806 | 9 在绝大多数情况下(99%), operator<< 不是被输出类的成员, 因为第一个参数是
ostream&. 你说的"在类的实现代码内部"是什么意思?
动,
【在 y**b 的大作中提到】 : 假设不需要access private member而重载<<, 以前也是在类的实现代码内部进行改动, : 而现在对__float128一无所知亦可在外部改动,是不是还是有些差别?
|
y**b 发帖数: 10166 | 10 这个理解。
多年没碰这些基础的facilities, 确实有点糊涂。我记得以前是把重载<<的代码跟类的
代码放在一起,也就是一个文件里面。现在回想,重载<<的代码完全可以不和类的代码
放在一个文件,编译器也能处理,是吧?
【在 t****t 的大作中提到】 : 在绝大多数情况下(99%), operator<< 不是被输出类的成员, 因为第一个参数是 : ostream&. 你说的"在类的实现代码内部"是什么意思? : : 动,
|
t****t 发帖数: 6806 | 11 你这不是挺明白的么.
【在 y**b 的大作中提到】 : 这个理解。 : 多年没碰这些基础的facilities, 确实有点糊涂。我记得以前是把重载<<的代码跟类的 : 代码放在一起,也就是一个文件里面。现在回想,重载<<的代码完全可以不和类的代码 : 放在一个文件,编译器也能处理,是吧?
|
y**b 发帖数: 10166 | 12 再问一个问题,如果对__float128重载>>, 比如
std::istream& operator >> (std::istream& is, __float128& number) {
double val;
is >> val;
number = (__float128) val;
return is;
}
就没有必要再对ifstream重写这个函数了吧?因为ifstream继承于istream,
想确认一下。
多谢耐心回复。
【在 t****t 的大作中提到】 : 你这不是挺明白的么.
|
t****t 发帖数: 6806 | 13 对的.
【在 y**b 的大作中提到】 : GCC quad precision math lib定义了一个数据类型__float128, : 头文件为, 库名为libquadmath.so. : 可是这个数据类型没有重载<<,输出时候有两个办法,一是调用某个函数转成 : 字符串进行输出,再一个就是进行类型转换(double)data再输出,可是对我 : 原有程序改动太大。有没有什么简单的办法比如重载<<? : ostream& operator << (ostream& os, const __float128 &r) { : os << (double)__float128; : return os; : }
|