我有一个类,它看起来像这样:
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
之间做出决定,因为两者都提供了合适的构造函数。
但是,我有没有办法确保用户可以通过传递QString
、std::string
或char数组来使用drawText()
方法?
要回答您的问题,是的:添加另一个需要const char*
的重载
从const char*
到QString的隐式转换是有问题的,因为它假定输入是ASCII。我怀疑Qt的人想完全删除那个构造函数,但这会破坏源代码的兼容性。如果您想在应用程序中禁用它,可以定义QT_NO_CAST_FROM_ASICI。