类运算符重载返回值问题求助:如何实现链式调用?
解决Console类<<运算符重载的链式调用返回值问题
你的错误根源在于返回值类型不匹配:this是指向当前Console对象的指针(类型为Console*),但函数声明要返回的是Console&(对象引用),直接返回this会导致类型转换错误。
修正后的代码
把返回语句改成解引用指针,返回当前对象的引用:
template <class out> Console& Console::operator<<(const out &data) { std::stringstream ss; ss << data; output += ss.str(); return *this; // 解引用this,返回对象引用 }
原理说明
*this会把指针转换成当前对象的左值引用,完全匹配函数的返回类型Console&,编译器就不会报错。- 返回对象引用后,链式调用
obj << "Hello" << "World\n"的执行逻辑是:先执行obj << "Hello",返回obj的引用,接着用这个引用继续调用<< "World\n",完美实现链式调用。
如果改成void返回类型,obj << "Hello"执行后没有返回值,后续的<< "World\n"就没有可调用的对象,自然会编译失败。
内容的提问来源于stack exchange,提问作者VukMar
相关产品推荐
相关产品推荐

