我想知道是否可以有一个函数参数而不关心它的类型是什么。例如,我有一个带有重写 << 运算符的类。但是,它唯一做的就是将参数添加到私有 ostringstream:
CLog& CLog::operator <<(const char * txt) {
buffer << txt;
return *this;
}
但是,这只允许我将 const char 写入缓冲区。我需要参数是任何类型都ostringstream <<
可以接受。那可能吗?
我想知道是否可以有一个函数参数而不关心它的类型是什么。例如,我有一个带有重写 << 运算符的类。但是,它唯一做的就是将参数添加到私有 ostringstream:
CLog& CLog::operator <<(const char * txt) {
buffer << txt;
return *this;
}
但是,这只允许我将 const char 写入缓冲区。我需要参数是任何类型都ostringstream <<
可以接受。那可能吗?
您可以使用模板:
template <typename T>
CLog& CLog::operator <<(const T& p) {
buffer << p;
return *this;
}
这可以通过模板完成:
template <class T>
Clog& Clog::operator <<(const T& t) {
buffer << t;
return *this;
}
template
在这种情况下,您可以使用 a 。
template<class T>
CLog& Clog::operator <<(const T& value) {
buffer << value;
return *this;
}
确保你没有通过任何无效的东西ofstringstream
。
另一个答案基本上是正确的,但它们不支持移动操作。利用
template <typename T>
CLog& CLog::operator <<(T&& p) {
buffer << std::forward<T>(p);
return *this;
}