C++ 模板化函数参数的惰性求值

C++ 模板化函数参数的惰性求值,c++,templates,operator-overloading,C++,Templates,Operator Overloading,我有一个用于日志记录的类,它不能继承std::ostream,并且有操作符,我认为这就是问题所在: template<typename T> MyLoggingClass & operator<<( T& data ){ ... } 正在尝试将临时引用绑定到非常量引用 改为: template<typename T> MyLoggingClass & operator<<(const T& data ){ ...

我有一个用于日志记录的类,它不能继承std::ostream,并且有操作符,我认为这就是问题所在:

template<typename T> MyLoggingClass & operator<<( T& data ){ ... }
正在尝试将临时引用绑定到非常量引用

改为:

template<typename T> MyLoggingClass & operator<<(const T& data ){ ... }
                                               //^^^^^

模板MyLoggingClass和运算符是否可以用构造函数周围的括号来解决?哦,我忘了提了。不,它不起作用:你是对的:那是康斯特的事。处理“遗留代码”的问题之一——除了在添加限定符后必须修复的与常量相关的级联错误之外。
template<typename T>
MyLoggingClass & operator<<( T& data )
{
    [...]
    if( someCondition )
    {
        cout << data;
    }
    [...]
}
MyLoggingClass logger;
logger << OneOfMyClasses(params); // Here I am invoking the constructor of class "OneOfMyClasses"
template<typename T> MyLoggingClass & operator<<( T& data ){ ... }
logger << OneOfMyClasses(params);
template<typename T> MyLoggingClass & operator<<(const T& data ){ ... }
                                               //^^^^^