重载运算符<<在自定义类(Singleton)中

时间:2016-02-25 13:57:27

标签: c++ qt operator-overloading

我正在使用QT,我创建了自定义类(MyClass)作为Singleton。

//MyClass.cpp

MyClass(){}

MyClass* MyClass::getInstance()
{
    if(!instance)
        instance = new MyClass();
    return instance;
}


//MyClass.h

public:
    static MyClass* getInstance();

private:
    MyClass();
    static MyClass* instance;

现在我需要重载运算符“<<”对于它,所以我可以在代码中这样称呼它:

 MyClass::getInstance()<<( QString("Tekst") );

但经过多次尝试 - 我无法理解我应该怎么做。我试过很多方面,但我仍然只能得到 - 不正确的声明错误(在MyClass.h中)或

  

与'operator&lt;&lt;'不匹配(操作数类型是'MyClass *'和'QString')

换行:

 MyClass::getInstance()<<( QString("Tekst") );

编辑1

基本上,我想使用这个类来保存那些QStrings。它应该类似于QDebug,但我得到了我指定的“地点”来保存它 - 仍然,输入数据的方式应该是相同的(使用&lt;&lt;)。

编辑2

很少有人在争论我没有尝试编写代码 - 这里有一些我的尝试(只是声明):

    MyClass  &operator<<(QString qds);
    //----
    MyClass* & operator<<(QString text);
    //----
    void  operator<<(QString rhs);
    //----
    MyClass*  operator<<(QString rhs);
    //----
    friend QString &operator<<(QString &input, const MyClass &mc );
    //----
     MyClass & operator<<(MyClass& out, const QString& text);

1 个答案:

答案 0 :(得分:0)

您可以将操作符编写为函数,在MyClass类之外:

void operator<< (MyClass* myClass, QString string);

或者,您可以将呼叫更改为

(*MyClass::getInstance())<<( QString("Tekst") );

或者您可以更改getInstance以便返回引用

MyClass& MyClass::getInstance()
{
    if(!instance)
        instance = new MyClass();
    return *instance;
}

在最后一种情况下,您将运算符编码为成员

void MyClass::operator<< (QString string);

或作为功能

void operator<< (MyClass& myClass, QString string);

如果您想使用

之类的内容,可以更改返回类型
MyClass::getInstance() << QString("Tekst") << QString("other Tekst");