1

私はこのようなクラスを持っています:

class MyClass {
public:
    void drawText(const QString& rText);
    void drawText(const std::string& rText);
};

同様drawText()に受け入れたいので、メソッドをオーバーロードしました。QStringstd::string

しかし、私がこのようなものを書くとき:

MyClass foo;
foo.drawText("Hello");

コンパイラは、への呼び出しdrawText()があいまいであると不平を言っています。

どちらも適切なコンストラクターを提供するため、 charの配列から、コンパイラーはaとaのQStringどちらかを決定できないことを理解しています。std::string

しかし、ユーザーがa 、a、またはcharの配列をdrawText()渡すことによってメソッドを使用できることを確認する方法はありますか?QStringstd::string

4

1 に答える 1

2

あなたの質問に答えるために、はい:かかる別のオーバーロードを追加しますconst char*

からQStringへの暗黙の変換const char*は、入力がASCIIであると想定しているため、問題があります。Qtの人々はそのコンストラクターを完全に削除したいと思っていると思いますが、ソースの互換性が損なわれるでしょう。アプリで無効にする場合は、QT_NO_CAST_FROM_ASCIIを定義できます。

于 2012-02-10T12:15:50.153 に答える