我有一个使用一个结构类,我想重载<<操作为结构,但仅限于类:
typedef struct my_struct_t {
int a;
char c;
} my_struct;
class My_Class
{
public:
My_Class();
friend ostream& operator<< (ostream& os, my_struct m);
}
当我宣布运营商<<超载瓦特/朋友的关键字,但随后的运营商是在我的代码到处都是超载,不只是在课堂上,我只能编译。 如何重载只有类中的<<运营商my_struct?
编辑:我将要使用重载运算符来打印为My_Class成员的my_struct
如何重载只有类中的<<运营商my_struct?
把它定义为
static std::ostream & operator<<( std::ostream & o, const my_struct & s ) { //...
要么
namespace {
std::ostream & operator<<( std::ostream & o, const my_struct & s ) { //...
}
在.cpp
文件,在其中您实现MyClass
。
编辑:如果你真的需要在类,没有别的范围,然后把它定义为在上述类的私人静态函数。 它只会在这个类范围和它的子类。 它会隐藏所有其他自定义operator<<
的为不相关的类定义,虽然(再次,只有里面的类,它的子类),除非他们能与ADL可以找到,或者是成员std::ostream
了。
不要使用操作符<<。 使用命名成员函数,并使其私人。
class My_Class
{
public:
My_Class();
private:
void Print( ostream & os, const my_struct & m );
};
请注意,您应该通过结构为const引用,无论使用哪种方法。
编辑:有没有必要使运营商<<类中的一员,所以您可以用它来打印类的成员。 你可以把它的结构,或者完全免费的功能,它的类,然后使用的一个朋友。
如果“只在My_Class超载”你的意思是唯一可见/可用我的类,你可以使用一个非成员过载,这只是可见My_Class。 例如
struct my_struct {
int a;
char c;
};
class My_Class
{
publiC:
My_Class();
}
然后在My_Class.cpp:
namespace {
ostream& operator(ostream& os, const my_struct& mystruct ) {
os << mystruct.a << mystruct.c;
}
}