在 c++ 中,如何修改运算符以便在同一语句中连续调用它两次
How can I modify an operator in order to call it twice in a row in the same statement, in c++?
我希望我的问题很清楚。我正在使用Qt,我想创建自己的记录器,以便将消息写入文本文件。我从这个开始:
class QLogger
{
public:
QLogger(QString filename);
void operator<<(const QString &s){
logFile->open(QFile::Append);
QTextStream writer(logFile);
writer << s;
logFile->close();
}
void operator<<(const quint64 &ui){
logFile->open(QFile::Append);
QTextStream writer(logFile);
writer << ui;
logFile->close();
}
void operator<<(const qint32 &ii){
logFile->open(QFile::Append);
QTextStream writer(logFile);
writer << ii;
logFile->close();
}
private:
QFile *logFile;
};
因此,如果我这样做:
QLogger logger("log.log");
logger << "Hola en";
logger << 23;
我按预期工作。但是,如果我尝试这样做:
logger << "Hola en" << 23;
然后我得到以下编译错误:
error: invalid operands of types 'void' and 'int' to binary 'operator<<'
如何定义运算符以使生产线工作?
logger << "Hola en" << 23;
相当于:
(logger << "Hola en") << 23;
对于第二个调用,左侧是表达式 logger << "Hola en"
生成的值,右侧是 23
。
这里需要的是让operator<<
返回对 QLogger 的引用。
不相关的:
在这种情况下,模板编程可以为您提供很多帮助:
template <class T>
QLogger &operator<<(const T &value){
logFile->open(QFile::Append);
QTextStream writer(logFile);
writer << value;
logFile->close();
return *this;
}
相关文章:
- g++的分段错误(在NaN上使用to_string两次时)
- 蛇在C++不会连续转两次
- 检查一个数组是否包含在另一个数组中,以相反的顺序,至少两次
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 我应该如何去缓解两次出现的cin?
- Realloc 两次无法在 Visual Studio 上运行
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- C++ 参考:这两个语句有什么区别?
- C++析构函数调用两次,堆栈分配的复合对象
- 为什么参数在构造 std::thread 时移动两次
- 这两个C++语句连接字符串有什么区别?
- Qt插槽调用了两次
- 做 std::用相同的unique_ptr移动两次
- 对于语句结束两次
- 在 c++ 中,如何修改运算符以便在同一语句中连续调用它两次
- 为什么我需要使用两次这个语句——矩阵乘法
- gdb执行同一语句两次
- 在循环重复两次之前,break 语句不起作用
- 如果不使用 pthread_join(),为什么'cout'语句从特定线程打印两次(即使它是同步的)?