适用于<<的变量模板简单记录器的操作员

时间:2015-09-12 18:05:07

标签: c++ operator-keyword variadic-templates

你能帮助我解决以下问题吗? 我正在尝试使用可变参数模板和包扩展来编写记录器。问题是我知道运营商&lt;&lt;必须只接受两个参数 - 第二个参数然后变成一个完整的包,我不知道如何将'const Args& ...rest'扩展为'const T& v, const Args& ...rest' 任何大师都可以解释如何重写可变参数表达式来实现这个目标吗?最终游戏的代码如下: log << "string" << 1 << 1.2;

立刻打印在一起。 (请原谅cout,它仅用于示例目的。想法是收集oss_中的所有参数,然后打印一次。)。 编译器当前抱怨,我理解这是运算符&lt;&lt;的问题。仅接受两个论点。

‘LogHandle& operator<<(LogHandle&, const T&, const Args& ...)’ must take exactly two argument

以下是代码:

 #include <iostream>
   #include <string>
   #include <sstream>

    class LogHandle {
        public:
        template<typename T>
        friend LogHandle& operator<<(LogHandle& l, const T& v)
        {
            l.oss_ << v;
            std::cout << "Value is: " << l.oss_.str().c_str();
            l.oss_.str("");
            l.oss_.clear();
            return l;
        }

        template<typename T, typename... Args>
        friend LogHandle& operator<<(LogHandle& l, const T& v, const Args&... rest)
        {
            l.oss_ << v << " ";
            return l << (rest...);
        }

        std::ostringstream oss_;
    };

    int main(int, char**)
    {  
        LogHandle log;
        log << "String" << 1;
    }

0 个答案:

没有答案