使用operator <<在向量中推送std :: strings

how*_*ieh 2 c++ string overloading stream operator-keyword

怎么可能用来 operator<<推进strings vector.我搜索了很多,但只找到流示例.

class CStringData
{

    vector< string > myData;
    // ...
    // inline  operator << ... ???
};
Run Code Online (Sandbox Code Playgroud)

我希望这可以用作一个简单的省略(类似void AddData(...))交换来获得健壮的参数.

CStringData abc;
abc << "Hello" << "World";
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

Naw*_*waz 8

您可以定义operator<<为:

class CStringData
{
    vector< string > myData;
  public:
    CStringData & operator<<(std::string const &s)
    {
         myData.push_back(s);
         return *this;
    }
};
Run Code Online (Sandbox Code Playgroud)

现在你可以这样写:

CStringData abc;
abc << "Hello" << "World"; //both string went to myData!
Run Code Online (Sandbox Code Playgroud)

但我建议你不要把它friend作为成员函数来实现CStringData:

class CStringData
{
    vector< string > myData;

  public:
    friend  CStringData & operator<<(CStringData &wrapper, std::string const &s);
};

//definition!
CStringData & operator<<(CStringData &wrapper, std::string const &s)
{
     wrapper.myData.push_back(s);
     return wrapper;
}
Run Code Online (Sandbox Code Playgroud)

用法与以前一样!

要探索为什么你喜欢把它变成朋友和规则是什么,请阅读: