在 main() 中控制 cin

take control of cin in 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[=12=]";
    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;
}

这里是把流作为参数默认为cin的代码:

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

现在这是否比做例如管道在很大程度上取决于功能将要使用的环境,因此需要对您的具体情况有更多了解。