[英]Overloading << operator C++ - Pointer to Class
class logger {
....
};
logger& operator<<(logger& log, const std::string& str)
{
cout << "My Log: " << str << endl;
return log;
}
logger log;
log << "Lexicon Starting";
工作正常,但我想使用指向 class 实例的指针。 IE
logger * log = new log();
log << "Lexicon Starting";
这可能吗? 如果是这样,语法是什么? 谢谢
编辑:编译器错误是
error: invalid operands of types 'logger*' and 'const char [17]' to binary 'operator<<'
您必须取消引用指向您的记录器 object 的指针,并且显然检查它是否不是 0。这样的事情应该可以完成:
log && ((*log) << "Lexicon starting")
作为一般情况,我会回避通过指针引用像记录器这样的对象(您通常无条件地希望存在),因为指针不确定,AKA 是否存在 object?
这是方法:
logger * log = new log();
(*log) << "Lexicon Starting";
为什么不使用参考?
logger & log = *(new log());
// the above is abhorrent code that
// should be replaced by something meaningful
log << "Lexicon Starting";
如果这不是你想要的我会 go 和Timo Geusch ,即使它很丑
根据您获取记录器的上下文,您可能希望返回引用而不是指针:
...
Logger& logger() {
return *_pLogger;
}
...
Logger& log = logger();
log << "...";
并不真地。 new log( )
具有指针类型, "Lexicon starting"
具有const char[16]
类型。 如果至少一个参数具有用户定义的类型,则只能重载运算符。
decasteljau 正确地指出,如果您需要指针,您可以通过(*log)
执行此操作。 但是,我不喜欢指针。 Andrei Alexandrescu 在“现代 C++ 设计”中花了很多篇幅介绍智能记录器单例,可能值得参考。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.