在c++类中重载全局函数getline

Overloading global function getline in a c++ class

本文关键字:全局 函数 getline 重载 c++      更新时间:2023-10-16

我正在做一个学校项目,实现一个多项式的c++类。我的类应该做的是从标准文件或文件中读取多项式。我一直在考虑重载>>,直到我在我最喜欢的c++参考网站上读到以下内容:

请注意,istream提取操作使用空白作为分隔符,因此这个操作只会提取可能的考虑溪流中的一个词。要提取整行文本,参考全局函数getline的字符串重载。

这让我所有的灵感重载全局函数getline为我的多项式类,以便它可以读取整行从一个文件。有很多教程和文章描述了如何重载流提取操作符,但我找不到关于getline的任何细节。我应该随意重载它吗?从参考资料来看,似乎是这样做的。

在我见过的一些重载getline函数中(比如在链接到的页面底部),我注意到它们返回类似"basic_istream"的东西。我只返回istream就够了吗?那么"char_type"呢?炭够吗?

基本上我想知道:这是一个任何东西会过载,或者有一些挑剔的细节,我应该担心?

这是我做的标题:

class Polynomial {
  public:
    friend istream& getline(istream& is, Polynomial & poly);
    friend istream& getline(istream& is, Polynomial & poly, char delim);
};
friend istream& getline(istream& is, Polynomial & poly) {
    return getline(is, poly, 'n');
}
friend istream& getline(istream& is, Polynomial & poly, char delim) {
    // read enough tokens to make a term
    // stop when we get to the delimiter
    return is;
}

谢谢!

您仍然应该重载operator >>。在您的操作符实现中,您可以根据需要提取尽可能多的"单词"(我假设每个系数大约一个单词)。

不要尝试超载getline,那是关于获得一行而不是Polynomial