由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 能否对某个库进行操作符重载?
相关主题
为什么在overloading中,friend <<不能读取private值呢?输入输出流,stl,api精通各需要多长时间?
重载 ^ 操作符编译出错继续请教C++重载问题,>>
C++重载<<错误?C++ problem
读取数据求教【讨论】为什么要用友员来实现算符重载?
如何把文件内容读到2D的vector里?问个程序问题
istream_iterator问题问个函数指针指向操作符的问题
how to read a sentence into a vector of string?C++糟粕和需要避免的。
C++ Q13: Input有没有会自动聚合的操作符重载或宏?
相关话题的讨论汇总
话题: float128话题: 重载话题: __话题: 代码话题: 进行
进入Programming版参与讨论
1 (共1页)
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;
: }

1 (共1页)
进入Programming版参与讨论
相关主题
有没有会自动聚合的操作符重载或宏?如何把文件内容读到2D的vector里?
C++中怎么传递std::hex这样的参数啊istream_iterator问题
子类的assignment operator 怎么访问父类的private memberhow to read a sentence into a vector of string?
fstream 扫盲,谢谢!C++ Q13: Input
为什么在overloading中,friend <<不能读取private值呢?输入输出流,stl,api精通各需要多长时间?
重载 ^ 操作符编译出错继续请教C++重载问题,>>
C++重载<<错误?C++ problem
读取数据求教【讨论】为什么要用友员来实现算符重载?
相关话题的讨论汇总
话题: float128话题: 重载话题: __话题: 代码话题: 进行