1

我有一个看起来像这样的类:

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 数组中,编译器无法在 aQString或 a之间做出决定std::string,因为两者都提供了合适的构造函数。

但是有没有办法让我确保用户可以drawText()通过传递 aQString或 astd::string或 char 数组来使用该方法?

4

1 回答 1

2

要回答您的问题,是的:添加另一个重载const char*

从到 QString 的隐式转换const char*是有问题的,因为它假定输入是 ASCII。我怀疑 Qt 的人想完全删除该构造函数,但它会破坏源代码兼容性。如果你想在你的应用程序中禁用它,你可以定义 QT_NO_CAST_FROM_ASCII。

于 2012-02-10T12:15:50.153 回答