如何重载运算符<<对于像这样的嵌套私有类?
class outer {
private:
class nested {
friend ostream& operator<<(ostream& os, const nested& a);
};
// ...
};
当在外部类编译器外面尝试抱怨隐私时:
error: ‘class outer::nested’ is private
答案 0 :(得分:12)
您也可以operator<<
成为outer
的朋友。或者您
可以在inline
中完全实现nested
,例如:
class Outer
{
class Inner
{
friend std::ostream&
operator<<( std::ostream& dest, Inner const& obj )
{
obj.print( dest );
return dest;
}
// ...
// don't forget to define print (which needn't be inline)
};
// ...
};
答案 1 :(得分:7)
如果你想在两个不同的文件(hh,cpp)中使用相同的东西,你必须给朋友两次这个函数如下:
HH:
// file.hh
class Outer
{
class Inner
{
friend std::ostream& operator<<( std::ostream& dest, Inner const& obj );
// ...
};
friend std::ostream& operator<<( std::ostream& dest, Outer::Inner const& obj );
// ...
};
CPP:
// file.cpp:
#include "file.hh"
std::ostream &operator<<( std::ostream& dest, Outer::Inner const& obj )
{
return dest;
}