std::endl 不适用于重载的运算符<<,尽管实现了专用的非模板函数
std::endl is not working with overloaded operator<< though dedicated non template function is implemented
我有一些 Logging::Logger
class 具有以下功能:
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;
虽然所有运算符似乎都已实现,但我收到以下错误:
error C2678: binary '<<': no operator found which takes a left-hand
operand of type 'const Logging::Logger' (or there is no acceptable
conversion)
当然,没有 endl
一切正常。
我查看了以下答案:
std::endl is of unknown type when overloading operator<<
我错过了什么?
因为您的重载运算符 return a const Logger &
,因此它们必须是 const
class 方法,以便您能够将它们链接在一起:
const Logger& Logger::operator<<(std::ostream& (*os)(std::ostream&)) const
但是,如果他们不是 const
class 成员会更好,并且 return 编辑 Logger &
,而不是:
template<typename T> Logger& Logger::operator<<(const T& in)
Logger& Logger::operator<<(std::ostream& (*os)(std::ostream&))
这可能是因为,据推测,operator<<
会以某种方式修改 Logger
实例。如果没有,您可以在此处使用 const
对象和方法。
我有一些 Logging::Logger
class 具有以下功能:
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;
虽然所有运算符似乎都已实现,但我收到以下错误:
error C2678: binary '<<': no operator found which takes a left-hand operand of type 'const Logging::Logger' (or there is no acceptable conversion)
当然,没有 endl
一切正常。
我查看了以下答案:
std::endl is of unknown type when overloading operator<<
我错过了什么?
因为您的重载运算符 return a const Logger &
,因此它们必须是 const
class 方法,以便您能够将它们链接在一起:
const Logger& Logger::operator<<(std::ostream& (*os)(std::ostream&)) const
但是,如果他们不是 const
class 成员会更好,并且 return 编辑 Logger &
,而不是:
template<typename T> Logger& Logger::operator<<(const T& in)
Logger& Logger::operator<<(std::ostream& (*os)(std::ostream&))
这可能是因为,据推测,operator<<
会以某种方式修改 Logger
实例。如果没有,您可以在此处使用 const
对象和方法。