使用QString或std::string:call重载的方法不明确



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

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

我重载了drawText()方法,因为我想接受QStringstd::string

但当我写这样的东西时:

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

编译器抱怨对drawText()的调用不明确。

我知道,从char数组中,编译器无法在QStringstd::string之间做出决定,因为两者都提供了合适的构造函数。

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

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

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

相关内容

  • 没有找到相关文章

最新更新