问题标签 [extraction-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
94 浏览

c++ - 为什么我不能对提取运算符执行 decltype

看起来这应该是合法的:

但是当我尝试编译时,我得到:

错误 C2661: std::basic_istream<char,std::char_traits<char>>::operator >>: 没有重载函数需要 2 个参数

难道我做错了什么?为什么这不评估为istream

编辑:

已经指出,因为istream& istream::operator>>(int&)是一个方法,所以第一个值是自动传递的。

但是:decltype(declval<istream>().operator>>(declval<int>())) test;错误:

错误 C2664: std::basic_istream<char,std::char_traits<char>> &std::basic_istream<char,std::char_traits<char>>::operator >>(std::basic_streambuf<char,std::char_traits<char>> *): 无法将参数 1 从转换std::ios_base::iostatestd::basic_istream<char,std::char_traits<char>> &(__cdecl *)(std::basic_istream<char,std::char_traits<char>> &)

decltype(istream::operator >> (declval<istream>(), declval<int>())) test;错误:

错误 C2661: std::basic_istream<char,std::char_traits<char>>::operator >>: 没有重载函数需要 2 个参数

0 投票
0 回答
52 浏览

c++ - 对的提取运算符

该标准提供了所有的比较运算符赋值运算pair。是否讨论过提取操作员的潜力?

例如:

显然,如果在pair包含未定义提取运算符的类型时使用 this,这将失败,就像比较pair不包含比较运算符的类型会失败一样。

但是想想能够在一个流中播放的快乐map!肯定有人提出这个?

0 投票
0 回答
13 浏览

c++ - Extraction operator overloading to read from a file stream with multiple data types

I have a text file containing several book names and their correlating ISBN numbers in the format shown below, names separated by a tab space.

I use extraction operator overloading for this data and then I push back this information into a BookData class vector and subsequently use an iterator to loop through and then output this data.

Everything works as planned with one exception: book names that contain whitespace, "The Expanse", do not show up. I understand now after some reading that extraction operators stop at any whitespace. "The" is read as the name and then it tries to read "Expanse" as the isbn number which causes it to stop reading.

My question: Is there any possible way to add parameters to the extraction operator to allow it to ignore single spaces from the text file, but still stop at tabs or multiple spaces so that books names containing whitespace can be used?

(header for BookData class below)

(cpp for BookData class below)

0 投票
0 回答
38 浏览

c++ - 使用提取运算符从复杂的类层次结构中提取数据

1 - 使用提取运算符不是从文件中提取一些数据,而是从大而复杂的类层次结构中提取一些数据,这听起来像是一种正确的方法吗?

将其简单地设为成员方法 ( void extractFromComplexInterface(const ComplxInterface&)) 会更好吗?

有更好的解决方案吗?

2-是否可以将此提取作为常规流操作处理?会ComplexInterface变成一个istream,实现一些神奇的功能,它会说“我将发送这个数据,然后这个和那个......”。然后,EXTRACTED_DATA 可以使用它的常规提取运算符 ( friend istream& operator>>(istream&, EXTRACTED_DATA&)),该运算符已定义为从文件流中读取。

如果这是可能的,如何?

0 投票
1 回答
134 浏览

c++ - 使用来自另一个类名的指针时提取运算符重载

在我的作业中,它指出程序必须具有/执行此操作:

使用 num 和 den 作为其私有数据定义一个 Fraction 类。包括用于将分数初始化为 0/1 的构造函数、复制构造函数、析构函数和用于重载赋值运算符的重载函数以及用于重载 << 和 >> 以输出和输入分数的友元函数(非成员)

定义一个名为 FracList 的类,其中包含私有成员 fracPtr、一个 Fraction 指针和保存 Fraction 对象数组大小的大小。

在 main 中,创建两个 FracList 对象,询问用户为每个列表分配多少元素,从键盘将用户指定的 Fraction 对象读入每个对象(使用 >> 运算符)。

这部分程序应如何运行的示例

输入列表 1 的分数数:3

输入列表 2 的分数数:4

为列表 1 输入 3 个分数:2/5 4/3 5/7

为列表 2 输入 4 个分数:5/8 5/4 3/8 4/9

main 中的部分是我遇到问题的地方,因为在 FracList 类中,我们使用的指针是 Fraction 类的一部分,这对我来说与提取运算符造成了很大的混淆。

我遇到的问题与 main 中代码的最后一部分有关,这很可能是由其他地方的其他错误引起的。fracPtr 是 FracList 类中的私有指针。但是,它被称为/初始化为分数 *fracPtr。我想正因为如此,当我输入 list1.fracPtr[i] 并允许用户输入分数时,它将引用 Fraction 类 >> 运算符(因为 Fraction 类 >> 运算符设置为这样做)。

这是我程序中的相关代码。

来自分数类 (.cpp)

(。H)

来自 FracList 类

(.cpp)

(。H)

(主要的)

0 投票
0 回答
72 浏览

c++ - 忽略流中输入字符的最佳方法

给定输入:和const char input[] = "lorem\t, ipsum"预期输出:我可以这样做:char first[size(input)]second[size(input)]

忽略空格和带有 . 的分隔符,。我想对流做同样的事情,但我能想到的最好的是:

我真正想要的是更像是:

但显然这是违法的。我想过:

  1. 将分隔符提取到的虚拟值
  2. 一个正则表达式迭代器

我不知道是否有更优雅的解决方案,我当然喜欢我可以内联做的事情,类似于sscanf解决方案。

Live Example

0 投票
1 回答
127 浏览

c++ - 使用 istream 提取运算符解析 csv:如何检测缺失的字段值?

我正在尝试使用 istream <<(operator) 进行简单的 csv(空格分隔值)解析。

我的文件 csv 文件格式如下所示:

文件.csv


/名字 | 价值 | 间隔 |

姓名1 11 1

姓名2 22 2

姓名3 33 3


我的示例代码如下所示:

我的代码在使用空行或注释或随机空格时运行良好,但如果缺少其中一个值,它将失败。例如,在 name2 行中,如果缺少值 22,则提取运算符会将 2 解释为该值,并且间隔将设置为 0,并且不会继续解析下一行。

我想知道是否存在一种简单的解决方法来检测 csv 文件中缺少的字段。我可以忽略缺少某些字段但解析继续以下行的那一行。

我查看了一些选项,例如 istream::get、getline、gcount、peek,但我想不出任何简单的解决方案。目前,我无法更改 csv 格式本身。

0 投票
2 回答
246 浏览

c++ - 失败后可以继续从流中读取吗?

我正在使用以下循环从两个文件中读取数字,直到两个文件都用完:

我的程序有效。但它能保证按标准工作吗?也就是说,是否允许我继续从失败的流中读取,或者实现可以选择抛出异常?