class logger {
....
};
logger& operator<<(logger& log, const std::string& str)
{
cout << "My Log: " << str << endl;
return log;
}
logger log;
log << "Lexicon Starting";
工作正常,但我想使用指向类实例的指针。即。
logger * log = new log();
log << "Lexicon Starting";
这可能吗?如果是这样,语法是什么?感谢
编辑:编译器错误是
error: invalid operands of types 'logger*' and 'const char [17]' to binary 'operator<<'
答案 0 :(得分:11)
你必须取消引用你的记录器对象的指针,并明显检查它是否不是0.这样的事情应该做的工作:
log && ((*log) << "Lexicon starting")
作为一般情况下,由于你用指针得到的不确定性,我会回避引用像记录器这样的对象(你通常无条件地期望它存在),因为AKA是否有一个对象? / p>
答案 1 :(得分:9)
这是方法:
logger * log = new log();
(*log) << "Lexicon Starting";
答案 2 :(得分:5)
为什么不使用参考?
logger & log = *(new log());
// the above is abhorrent code that
// should be replaced by something meaningful
log << "Lexicon Starting";
如果这不是您想要的,我会选择Timo Geusch,即使它很难看
答案 3 :(得分:2)
根据您从中获取记录器的上下文,您可能希望返回引用而不是指针:
...
Logger& logger() {
return *_pLogger;
}
...
Logger& log = logger();
log << "...";
答案 4 :(得分:2)
不是真的。 new log( )
具有指针类型,"Lexicon starting"
具有类型const char[16]
。如果至少有一个参数具有用户定义的类型,则只能重载运算符。
decasteljau正确地指出,如果你想要指针,可以通过(*log)
执行此操作。但是,我不喜欢指针。 Andrei Alexandrescu在“现代C ++设计”中专注于智能记录器单例,可能值得参考。