我想創建針對變異型結構的輔助包裝,所以這種類型的簽名會召喚必要的轉換,如:C++明確的函數簽名
variant CreateVariant(bool value);
variant CreateVariant(int value);
variant CreateVariant(char *value);
問題是BOOL和INT的,因爲他們是隱式轉換類型...
因此,對於類似的代碼:
variant a = CreateVariant((BOOL)value);
variant a = CreateVariant((__int64)value);
variant a = CreateVariant(1);
有一些問題。
如何設計一個乾淨的包裝,如果我需要作爲布爾和整數類型的布爾和未簽名的int/uints/longs/longlongs處理布爾?
對於類構造函數,我可以使用explicit
關鍵字,但是我必須在我正在更新的代碼中使用函數int。
我認爲這裏的問題是'BOOL'類型只是'int'的'typedef'。我不認爲在這種情況下有什麼辦法可以消除這兩者的歧義,儘管我可能是錯的。 – templatetypedef 2012-03-06 03:45:06
我看不到問題。我嘗試用'bool','int'和'__int64_t'重載一個函數,並且每次都能夠區分每一個函數。 – howardh 2012-03-06 03:56:22
@ howardh-請注意,該示例使用'BOOL'而不是'bool'。 'BOOL'是'int'的微軟'typedef',因此是這個問題。 – templatetypedef 2012-03-06 04:01:04