Использование перегруженного оператора >> внутри конструктора класса для его инициализации - PullRequest
1 голос
/ 10 апреля 2020

Я перегружен оператор >>, делая объект из потока. Мне было интересно, могу ли я использовать это в конструкторе, который принимает в том же формате, что и поток, но в виде строки. Могу ли я использовать оператор >> в конструкторе, или мне нужно будет сделать код, чтобы разделить эту строку по-разному?

Например:

Person::Person(std::string line)
{
    // this doesn't work
    this >> line;
}

std::istream &operator>>(std::istream &is, Person &p)
{
    char c1;

    std::string forename, surname;

    if (is >> forename >> c1 >> surname)
    {
        if (c1 == ',')
        {
            p.forename = forename;
            p.surname = surname;
        }
        else
        {
            is.clear(std::ios_base::failbit);
        }
    }

    return is;
}

Пример ввода: Foo, Bar

1 Ответ

4 голосов
/ 10 апреля 2020
#include <sstream>
Person::Person(std::string line)
{
    std::stringstream ss(line);
    ss >> *this;
}
...