我有一个看起来像这样的课程:
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
或char数组来使用std::string
方法?
答案 0 :(得分:2)
要回答您的问题,是:添加另一个需要const char*
从const char*
到QString的隐式转换是有问题的,因为它假定输入是ASCII。我怀疑Qt人们想要完全删除该构造函数,但它会破坏源兼容性。如果要在应用程序中禁用它,可以定义QT_NO_CAST_FROM_ASCII。