c++ - 为任何返回 vector 的函数重载 ostream

标签 c++ templates operator-overloading reference

嗨,假设我有 A 类:

using namespace std;
template <class T>
class A{
private:
 vector<T> my_V;
public:
 // assume initializations etc are done
 inline vector<T> get_v()
 {
   return my_v;
 }
};

还有一些地方我重载了 std::vector 的 ostream

template <class T>
ostream & operator<<(ostream& out, vector<T> &vec)
{
    CUI size=vec.size();
    for (int i = 0; i < size; i++)
        out << vec.at(i) << " ";
    if(size>0)out << endl;
    return out;
}

当我尝试

A<int> obj;
cout<<obj.get_v; // gives soo many errors

但是当我这样做的时候

A<int> obj;
vector<int> v= obj.get_v;
cout<<v; // it works fine

我知道 ostream 重载有问题,或者我可能需要其他重载技术,有人可以帮我解决这个问题吗?提前致谢

最佳答案

你的 operator<<重载采用非常量引用。你的A<T>::get_v()函数返回 std::vector<T>按值(value);这个返回的对象是临时的。非常量引用不能绑定(bind)到临时对象。

您的重载需要采用常量引用 ( const std::vector<T>& )。

关于c++ - 为任何返回 vector 的函数重载 ostream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4006603/

相关文章:

c++ - 如何使用 C++ 在 Node 中编辑歌曲元数据?

c++ - 创建一个包含要绘制的项目的类(段错误)

c++ - 及时调试和文件流的真正奇怪的问题

c++ - 模板;点<2, 双>;点<3,双>

c++ - 运算符重载以构造异常消息

c++ - 为什么默认的三向运算符 (spaceship <=>) 生成相等运算符 (==) 而用户定义的三向运算符不生成?

c++ - 如何检测 operator[] 是否适用于 Type?

c++ - native c++ 指针(例如 uint16 *)上 std::find() 的替代或增强

c++ - 模板基类 C++ 中的重写函数指针问题

c++ - 使用模板容器制作模板类