перегрузка метода с помощью QString или std :: string: вызов неоднозначен - PullRequest
1 голос
/ 10 февраля 2012

У меня есть класс, который выглядит так:

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

Я перегрузил метод drawText(), потому что хочу принять QString, а также std::string.

Но когда я пишу что-то вроде этого:

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

Компилятор жалуется, что вызов drawText() неоднозначен.

Я понимаю, что из массива char компилятор не может выбирать между QString или std::string, потому что оба предоставляют подходящий конструктор.

Но есть ли у меня способ убедиться, что пользователь может использовать метод drawText(), передав QString или std::string или массив char?

1 Ответ

2 голосов
/ 10 февраля 2012

Чтобы ответить на ваш вопрос, да: добавьте еще одну перегрузку, которая принимает const char*

Неявное преобразование из const char* в QString проблематично, так как предполагается, что вводом является ASCII.Я подозреваю, что люди из Qt хотели бы вообще удалить этот конструктор, но это нарушило бы совместимость с исходным кодом.Если вы хотите отключить его в своем приложении, вы можете определить QT_NO_CAST_FROM_ASCII.

...