2012-02-10 23 views
1

我有一個類,它看起來像這樣:法的QString或std ::字符串超載:調用不明確

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

我重載drawText()方法,因爲我想接受QString以及std::string

但是,當我寫的東西是這樣的:

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

編譯器抱怨調用drawText()是模糊的。

據我所知,從字符數組,編譯器不能一QStringstd::string之間決定,因爲兩者都提供一個合適的構造。

但是,有沒有辦法,我以確保用戶可以通過傳遞QStringstd::string或字符數組使用drawText()方法?

+2

您正在使用QT,爲什麼不使用QString並且不使用std功能?將2個具有相似功能的庫合併在一起,會在後面咬你。 – RvdK 2012-02-10 10:51:19

+0

我通常只使用QString,我可以堅持下去,但我的問題更多是因爲好奇心。 – 2012-02-10 11:05:04

回答

2

要回答你的問題,是:添加另一個重載這需要const char*

const char*到QString的隱式轉換是有問題的,因爲它假定輸入是ASCII。我懷疑Qt人員想要完全刪除該構造函數,但它會破壞源代碼兼容性。如果你想在你的應用中禁用它,你可以定義QT_NO_CAST_FROM_ASCII。

相關問題