Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 自定义模板运算符上出现错误C2676<&书信电报;(T x)_C++_Templates_Std - Fatal编程技术网

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&)) { ... }