我正在使用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);
答案 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");