字符串到对象的插入重载

Insertion Overload with String to Object

这里是 C++ 的新手。我有我正在做的项目 要求我像这样重载插入运算符:

someObject << “stringOne” << “stringTwo” << stringThree <<;

这行代码的想法本质上是将一些字符串添加到数组中,该数组包含“someObject ’成立。

我知道插入重载的原型是这样的,但我不确定如何定义实际函数,所以它像我上面提到的那样工作。

friend std::ostream& operator<<(ostream& os, const someClass& classObj);

我在网上看到的所有例子都是'ostream& identifier'作为左操作数&对象作为右操作数,像这样 'os << someObject' 所以我不确定如何让它像我上面提到的那样工作。

你可以让 operator<< 成为一个成员函数来获得你想要的语法:

someClass& operator<<(std::string str) {
    // add the string to this
    return *this;
}

你可以这样做:

someObject << "hello" << "world";

您可以在右侧为您想要的任何其他类型添加额外的重载。

这里是 demo

我认为您需要为 class.

重载插入运算符
#include <iostream>
#include <string>
#include <vector>

using namespace std;

class A {
public:

  A & operator <<(const std::string & s) {
    v.push_back(s);
    return *this;
  }

  void print() const {
    for (auto & s: v) {
      cout << "element:" << s << endl;
    }
  }

private:
  vector<string> v;
};

int main() {
  A a;
  string s = "string object";

  a << "test" << "string" << s;

  a.print();

  return 0;
}

该技术称为“链接”,您看到的示例是不言自明的。链式运算符作用于对对象和参数的引用以及对对象的 returns 引用。

DataList &  operator<<(DataList &out, const Data &arg)
{
     // insert arg into out
     return out; 
}

在这种情况下

someObject << “stringOne” << “stringTwo” << stringThree;

就像

一样工作
((someObject << “stringOne”) << “stringTwo”) << stringThree;