【发布时间】:2015-01-11 23:01:20
【问题描述】:
我想打印一个 std::unique_ptr,它是 Bar 的一个类成员。 但是,以下代码不起作用,请参阅我对 stream 的评论 我想我应该改变我的 foo_unique() 访问器,但我不知道怎么做。
#include <iostream>
#include <memory>
class Foo
{
public:
Foo() : n_(1) {}
int n() const { return n_; }
private:
int n_;
};
std::ostream& operator<< (std::ostream& stream, const Foo& foo);
std::ostream& operator<< (std::ostream& stream, const Foo& foo)
{
stream << foo.n();
return stream;
}
class Bar
{
public:
Bar() : m_(2), foo_(), foo_unique_(std::make_unique<Foo>()) {}
int m() const { return m_; }
const Foo& foo() const { return foo_; }
const std::unique_ptr<Foo>& foo_unique() const { return foo_unique_; } // what to return here ?
private:
int m_;
Foo foo_;
std::unique_ptr<Foo> foo_unique_;
};
std::ostream& operator<< (std::ostream& stream, const Bar& bar);
std::ostream& operator<< (std::ostream& stream, const Bar& bar)
{
stream << bar.m() << ",";
stream << bar.foo();
// stream << bar.foo_unique(); // does not work !!!
return stream;
}
int main()
{
Bar bar;
std::cout << bar << std::endl;
}
我怎样才能正确地做到这一点?
编辑:我想要流
【问题讨论】:
-
对于 341 信誉,您提供这样的错误描述并不好!
-
1)
const std::unique_ptr<Foo>& foo_unique() const应该做什么(准确地说)?为什么除了Foo const& foo() const还需要? 2)stream << bar.foo_unique();应该做什么? -
对不起,缺少精确流
-
如果你写
stream << *bar.foo_unique();,你会得到完全相同的行为。如果您不想编写额外的*,则需要定义另一个operator<<。
标签: c++ c++14 unique-ptr