0

我想知道是否可以有一个函数参数而不关心它的类型是什么。例如,我有一个带有重写 << 运算符的类。但是,它唯一做的就是将参数添加到私有 ostringstream:

CLog& CLog::operator <<(const char * txt) {
    buffer << txt;
    return *this;
}

但是,这只允许我将 const char 写入缓冲区。我需要参数是任何类型都ostringstream <<可以接受。那可能吗?

4

4 回答 4

5

您可以使用模板:

template <typename T>
CLog& CLog::operator <<(const T& p) {
    buffer << p;
    return *this;
}
于 2013-03-23T14:55:48.527 回答
1

这可以通过模板完成:

template <class T>
Clog& Clog::operator <<(const T& t) {
    buffer << t;
    return *this;
}
于 2013-03-23T14:55:51.337 回答
1

template在这种情况下,您可以使用 a 。

template<class T>
CLog& Clog::operator <<(const T& value) {
    buffer << value;
    return *this;
}

确保你没有通过任何无效的东西ofstringstream

于 2013-03-23T14:55:54.527 回答
0

另一个答案基本上是正确的,但它们不支持移动操作。利用

template <typename T>
CLog& CLog::operator <<(T&& p) {
    buffer << std::forward<T>(p);
    return *this;
}
于 2013-03-23T14:58:18.527 回答