我有一些具有以下功能的Logging::Logger
类:
template<typename T>
const Logger& Logger::operator<<(const T& in) const {
// ...
return *this;
}
const Logger& Logger::operator<<(std::ostream& (*os)(std::ostream&)) {
// ...
return *this;
}
以下代码:
loggerInstance << "ID: " << 5 << endl;
虽然所有运算符似乎都已实现,但我收到了以下错误:
错误C2678:二进制&#39;&lt;&lt;&#39;:找不到左侧的操作员 类型&#39; const Logging :: Logger&#39;的操作数(或者没有可接受的 转化率)
当然,没有endl
一切正常。
我看了下面的答案:
std::endl is of unknown type when overloading operator<<
我错过了什么?
答案 0 :(得分:3)
因为重载的运算符返回const Logger &
,所以它们必须是const
类方法,以便您能够将它们链接在一起:
const Logger& Logger::operator<<(std::ostream& (*os)(std::ostream&)) const
但是,如果他们不是const
班级成员,并且返回Logger &
,则会更好:
template<typename T> Logger& Logger::operator<<(const T& in)
Logger& Logger::operator<<(std::ostream& (*os)(std::ostream&))
这可能是因为,operator<<
可能会以某种方式修改Logger
实例。如果没有,您可以在此处使用const
个对象和方法。