在 c++ 中,如何修改运算符以便在同一语句中连续调用它两次

How can I modify an operator in order to call it twice in a row in the same statement, in c++?

本文关键字:两次 语句 连续 调用 运算符 c++ 何修改 修改      更新时间:2023-10-16

我希望我的问题很清楚。我正在使用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;
}