使用重载的<<运算符打印嵌套向量的内容

我想在朋友重载运算符

班级在这里:

#ifndef FOR_FUN_TESTCLASS_HPP
#define FOR_FUN_TESTCLASS_HPP

#include <utility>
#include <vector>
#include <string>
#include <ostream>

class TestClass {

public:
    TestClass(uint32_t i,std::string s,std::vector<uint32_t> v) : i_(i),s_(std::move(s)),v_(std::move(v)) {}

    friend std::ostream &operator<<(std::ostream &os,const TestClass &aClass) {
        os << "i_: " << aClass.i_
        << " s_: " << aClass.s_
        << " v_: " << aClass.v_; //compiler error
        return os;
    }

private:
    uint32_t i_ {0};
    std::string s_;
    std::vector<uint32_t> v_ {};
};

#endif //FOR_FUN_TESTCLASS_HPP

但是当我调用main方法时,它不会编译

TestClass tc { 1,"one",{1,2,3}};
std::cout << tc << std::endl;

这是因为操作员

  

错误:错误:运算符不匹配

我不想使用for运算符进行迭代,我在寻找一种明智的解决方案,即在ostream中复制矢量内容吗?

xin5232823 回答:使用重载的<<运算符打印嵌套向量的内容

这将完成工作:

friend std::ostream &operator<<(std::ostream &os,const TestClass &aClass) {
    os << "i_: " << aClass.i_
    << " s_: " << aClass.s_
    << " v_: ";
    for(auto it : aClass.v_) 
        os << it<<' ';
    return os;
}

Godbolt上直播。

或带有副本:

std::copy(aClass.v_.begin(),aClass.v_.end(),std::ostream_iterator<uint32_t>(std::cout,' '));

Godbolt上直播。

本文链接:https://www.f2er.com/3133036.html

大家都在问