请考虑以下代码。我正在尝试将向量的向量输出到 ostream。
#include <iterator>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
template<typename T>
std::ostream &operator <<(std::ostream &os, const std::vector<T> &v) {
using namespace std;
copy(v.begin(), v.end(), ostream_iterator<T>(os, "\n"));
return os;
}
int main() {
using namespace std;
vector<string> v1;
cout << v1;
vector<vector<string> > v2;
cout << v2;
return 0;
}
我输出字符串向量的语句有效。我输出字符串向量向量的那个不是。我正在使用 g++ 4.7.0。我试过 w/ & w/o -std=c++11 标志。在 C++11 模式下,它在半页错误中给了我这一行。
error: cannot bind 'std::ostream_iterator<std::vector<std::basic_string<char> >, char, std::char_traits<char> >::ostream_type {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
我不认为我明白这意味着什么。有人可以向我解释吗?我或多或少知道什么是右值引用,但我不明白为什么std::basic_ostream<char>
不绑定到std::basic_ostream<char>&&
. 可能我还不够了解。有没有更好的方法来做到这一点?
提前致谢。