막대의 클래스 멤버 인 std :: unique_ptr을 인쇄하고 싶습니다. 그러나 다음 코드는 내 의견을 에 표시하지 않습니다. < < bar.foo_unique(); 내 foo_unique() 접근자를 변경해야한다고 생각하지만 어떻게해야할지 모르겠다.ostream : std :: unique_ptr 클래스 멤버
#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;
}
어떻게 제대로 수행 할 수 있습니까?
편집 : 스트림 싶어요 < < bar.foo_unique(); 스트림과 같은 동작을한다. < < bar.foo();
평판이 좋지 않은 경우 오류 설명을 제공하는 것은 좋지 않습니다! – gsamaras
1)'const std :: unique_ptr & foo_unique() const'는 (정확히) 어떻게해야하나요? 'Foo const & foo() const' 외에 왜 필요합니까? 2)'stream << bar.foo_unique();는 무엇을해야합니까? –
dyp
정밀도가 부족한 죄송합니다. << bar.foo_unique(); stream << bar.foo();와 같은 동작을 가져야합니다. ! – coincoin