广义参数

时间:2013-03-23 14:54:38

标签: c++

我想知道是否有可能有一个函数参数而不关心它的类型是什么。 例如,我有一个覆盖的类<<运营商。但它唯一能做的就是将param添加到私有ostringstream:

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

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

4 个答案:

答案 0 :(得分:5)

您可以使用模板:

template <typename T>
CLog& CLog::operator <<(const T& p) {
    buffer << p;
    return *this;
}

答案 1 :(得分:1)

可以使用模板完成:

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

答案 2 :(得分:1)

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

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

请确保您没有传递对ofstringstream无效的任何内容。

答案 3 :(得分:0)

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

template <typename T>
CLog& CLog::operator <<(T&& p) {
    buffer << std::forward<T>(p);
    return *this;
}