Взять контроль над cin в main()

Есть ли способ взять под контроль Cin, чтобы я мог проверить эту функцию?

void foo() {
    int n;
    cin >> n;
}

Я хотел бы сделать

int main()
{
    // take control of cin and use a stringstream instead
    stringstream ss;
    1 >> ss;
    s >> foo(); // will for sure not work?
}

Примечание: для полноты здесь приведен окончательный код:

struct membuf : std::streambuf
{
    membuf(char* begin, char* end) {
        this->setg(begin, begin, end);
    }
};

int main()
{
    char buffer[] = "3\0";
    membuf sbuf(buffer, buffer + sizeof(buffer));
    std::istream in(&sbuf); 
    foo(in);
}

void foo(std::istream& iss = std::cin)
{
    int n; // number of students
    iss >> n;
}

1 ответ

Решение

Вот код для принятия потока в качестве параметра и по умолчанию cin:

void foo(std::istream& iss = std::cin) {
    int n;
    iss >> n;
}

Теперь, будет ли это предпочтительнее, чем выполнение, например, трубопроводов, во многом зависит от среды, в которой будут использоваться функции, и поэтому требует большего знания вашего конкретного случая.

Другие вопросы по тегам