我可以制作std::两对std::ostream-s吗



我想制作一对包含两个std::ostream对象的对象。我需要它,这样我就可以将一个对象传递给各种函数,而不是两个std::ostream对象。我希望我能做到这一点:

#include <iostream>
#include <ostream>
using namespace std;
int main(){
std::ostream output( std::cout.rdbuf());
std::ostream error(std::cout.rdbuf());
using Logger = std::pair< std::ostream, std::ostream >;
Logger logger = std::make_pair( output, error );
return 0;
}

但我得到了一个编译器错误,即pair<std::basic_ostream<char>, std::basic_ostream<char> >没有匹配的构造函数

您遇到的问题是无法复制ostream
解决方案是使用一对引用:

using Logger = std::pair<std::ostream &, std::ostream &>;
Logger logger { output, error };

您可以对它们进行引用,而不是复制流不支持的复制

auto logger{::std::tie(output, error)};

最新更新