のコメント欄のは、標準のC++/Qtの方法で動作しますか?Qtオブジェクトを暗黙的にQStringに変換する方法は?
class A {
public:
A() { }
virtual ~A() { }
virtual QString toString() { return "A"; }
};
class B: A {
public:
B() { }
~B() { }
QString toString() { return "B"; }
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
A a_;
B b_;
// qDebug() << a_; // I can make this work by overloading << yes?
// qDebug() << b_;
// QString x = a_; // How do I make this work?
// QString y = b_;
QString s = a_.toString(); // What I'm doing at present
qDebug() << b_.toString(); // What I'm doing at present
return a.exec();
}
私はすべてが同じ基本クラスから派生した独自のQtクラスのインスタンスの階層を持っています。
上記のtoString
のような私自身の標準的な方法では、上記のように明示的に自分自身で行うことができますが、それは暗黙的ではありません。私はこれを暗黙のうちに、私が気づいていない人がいると思うので、むしろQtまたはC++のコンベンションに従います。
文字列は最終的にはoperator <<
がオーバーロードされていると思うQ * Viewコントロールに表示されます。ただvirtual operator QString()
でvirtual QString toString()
を交換する、あなたのケースでそう
struct foo
{
operator int() { return 5; }
};
foo f;
int i = f; // uses operator to convert to int
:
ところで、空のパブリックコンストラクタと空のパブリック非仮想デストラクタを定義することに意味はありません。 – GManNickG
@GMan:ありがとう、上記のデストラクタは 'public virtual'です。 –
@Petermcg:1つは、はい(私のリストがそれを確認したことを確認しました)、もう1つは明示的に定義する必要はありません。 – GManNickG