广义参数

Generalized parameter

本文关键字:参数      更新时间:2023-10-16

我想知道是否有可能有一个函数参数,而不在乎它的类型是什么。例如,我有一个重写了<<操作符。但是,它所做的唯一事情是将参数添加到私有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

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;
}