C++ 自定义模板运算符上出现错误C2676<&书信电报;(T x)
我有一个C++ 自定义模板运算符上出现错误C2676<&书信电报;(T x),c++,templates,std,C++,Templates,Std,我有一个logger类,它封装了2个std::of stream: class logger { private: std::ofstream one; std::ofstream two; public: logger(); ~logger(); template<typename T> logger & operator<<(T); }; logger::logger() { //
logger
类,它封装了2个std::of stream
:
class logger
{
private:
std::ofstream one;
std::ofstream two;
public:
logger();
~logger();
template<typename T> logger & operator<<(T);
};
logger::logger()
{
// open streams
}
logger::logger()
{
// close streams
}
template<typename T> logger & logger::operator<<(T log)
{
this->one<<log;
this->two<<log;
return * this;
}
类记录器
{
私人:
std::流一;
第二流的std::;
公众:
记录器();
~logger();
模板记录器和操作员是一个函数模板。它是一个IO操纵器
有一个std::endl
,std::endl
和无限多的其他std::endl
s,每种可能的字符类型一个。编译器不知道您可能指的是哪一种
它与std::basic_ostream
一起工作,因为std::basic_ostream
重载operatorIt的模板T
应该成为任何类型。哎呀,我把参数名误读为类型。你是对的,我知道我遗漏了什么,解决了我所有的困惑。std::endl确实是模板函数。
int main(int argc, char * argv[])
{
debug::log << "Some strgins"; // works perfect.
debug::log << std::endl; // error C2676: binary '<<' : 'logger' does not define this operator or a conversion to a type acceptable to the predefined operator
return 0;
}
logger & logger::operator<<(std::ostream& (manip)(std::ostream&)) { ... }