在自定义 class 中重载运算符 <<(单例)
Overloading operator << in custom class (Singleton)
我正在使用 QT,我创建了我的自定义 class (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 中)或
no match for 'operator<<' (operand types are 'MyClass*' and 'QString')
行:
MyClass::getInstance()<<( QString("Tekst") );
编辑 1
基本上,我想用这个 class 来保存那些 QString。它应该类似于 QDebug,但我得到了我指定的 "place" 来保存它 - 尽管如此,输入数据的方式应该是相同的(使用 <<)。
编辑 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);
您可以在 class MyClass:
之外将运算符编写为函数
void operator<< (MyClass* myClass, QString string);
或者,您可以将调用更改为
(*MyClass::getInstance())<<( QString("Tekst") );
或者您可以更改 getInstance 使其return成为参考
MyClass& MyClass::getInstance()
{
if(!instance)
instance = new MyClass();
return *instance;
}
在最后一种情况下,您将操作员编码为成员
void MyClass::operator<< (QString string);
或函数
void operator<< (MyClass& myClass, QString string);
您可以更改 return 类型,如果您想使用
MyClass::getInstance() << QString("Tekst") << QString("other Tekst");
我正在使用 QT,我创建了我的自定义 class (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 中)或
no match for 'operator<<' (operand types are 'MyClass*' and 'QString')
行:
MyClass::getInstance()<<( QString("Tekst") );
编辑 1
基本上,我想用这个 class 来保存那些 QString。它应该类似于 QDebug,但我得到了我指定的 "place" 来保存它 - 尽管如此,输入数据的方式应该是相同的(使用 <<)。
编辑 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);
您可以在 class MyClass:
之外将运算符编写为函数void operator<< (MyClass* myClass, QString string);
或者,您可以将调用更改为
(*MyClass::getInstance())<<( QString("Tekst") );
或者您可以更改 getInstance 使其return成为参考
MyClass& MyClass::getInstance()
{
if(!instance)
instance = new MyClass();
return *instance;
}
在最后一种情况下,您将操作员编码为成员
void MyClass::operator<< (QString string);
或函数
void operator<< (MyClass& myClass, QString string);
您可以更改 return 类型,如果您想使用
MyClass::getInstance() << QString("Tekst") << QString("other Tekst");