如何打印出唯一指针对象向量中的值(基于范围的循环)?C++



我这里有一段代码,我有一个填充的智能指针对象的向量,我如何使用基于范围的 for 循环打印所有对象的所有值?我不想要地址,而是值。提前谢谢你。

void printInfo(const std::vector< std::unique_ptr<Bird> >&fullData )
{
    for(auto &info : fullData)
    {
        std::cout<< &info <<endl; //I want this to print getName() for each object, but how do I do that with range-based-for-loop? Something like this.. info->getName()
    }
}
void fillFlock( std::vector< std::unique_ptr<Bird> > &cage)  
{
  size_t cageSize;
  std::string name;
  std::cout << "Bird cage size: " <<std::endl;
  std::cin >> cageSize;
  //set container size
  cage.resize(cageSize);
    for(auto &bird : cage)
    {
        std::cout<<"Bird Name " <<std::endl;
        std::cin >> name;
        bird.reset(new Bird(name));
    }
}
int main()  
{
    std::vector< std::unique_ptr<Bird> > m_flock;
    fillFlock(m_flock);
    printInfo(m_flock);
}

您实际上是在创建一个指向唯一指针的新指针,然后打印该指针的地址。使用 & 创建指针,*取消引用(获取值(。换句话说,

std::cout << *info << std::endl;

编辑:问题已更改并添加了额外的上下文

如果要在 info 上调用该函数,则调用该函数,

std::cout << info->getName() << std::endl;

info的类型只是std::unique_ptr<Bird>&,如果这就是抛弃你的东西。

也许您希望流式处理运营商自动发生这种情况。执行此操作的一种方法是定义一个采用Bird类的operator<<。您可以通过将以下声明添加到Bird类来执行此操作,

class Bird {
    friend std::ostream& operator<<(std::ostream& out, const Bird& bird);
};

然后在源文件中添加定义,

std::ostream& operator<<(std::ostream& out, const Bird& bird) {
    return out << bird.getName();
}

这假设您的getName函数是常量限定的,它确实应该是。

相关内容

  • 没有找到相关文章

最新更新