C++ std::unique_ptr类成员上的ostream
我想打印一个std::unique_ptr,它是Bar的类成员。C++ std::unique_ptr类成员上的ostream,c++,c++14,unique-ptr,C++,C++14,Unique Ptr,我想打印一个std::unique_ptr,它是Bar的类成员。 但是,下面的代码不起作用,请参阅我关于Sturry的注释:对于 STD::UNQuyJPPT< /COD>没有定义输出操作符:这有点令人伤心,但是许多C++类缺少输出运算符。最简单的方法是只打印指针: stream << bar.foo_unique().get(); 没有从std::unique_ptr到T const&的隐式转换,这会阻止流插入操作符的确定。不过你有几个选择。第一个选项是为341声誉提供一个运算符
但是,下面的代码不起作用,请参阅我关于Sturry
的注释:对于<代码> STD::UNQuyJPPT< /COD>没有定义输出操作符:这有点令人伤心,但是许多C++类缺少输出运算符。最简单的方法是只打印指针:
stream << bar.foo_unique().get();
没有从
std::unique_ptr
到T const&
的隐式转换,这会阻止流插入操作符的确定。不过你有几个选择。第一个选项是为341声誉提供一个运算符重写。这样提供错误描述是不好的!1) const std::unique\u ptr&foo\u unique()const
应该(准确地)做什么?除了Foo const&Foo()const
,为什么还需要它?2) 什么是stream如果你写stream谢谢你的stream他忘了out@leemes:true-不测试代码的危险!谢谢修理!“哪一个阻止了流插入操作符的推导”是在模板参数推导中推导出来的?
stream << bar.foo_unique().get();
stream << *bar.foo_unique();
std::ostream& operator<< (std::ostream& out, std::unique_ptr<Foo> const& foo) {
return out << *foo; // or foo.get()depending on what you want to get printed
}
std::ostream& operator<< (std::ostream& out, Foo const& arg)
{
// output stuff here
return out;
}
template<class T>
std::ostream& operator<< (std::ostream& out, std::unique_ptr<T> const& arg)
{
return out << *arg;
}