[英]c++ implicitly convert function arguments via custom assignment operator
我正在開發一個項目,其中一部分是 C,一部分是 C++。
我得到了 2 個基本上代表相同的枚舉,但是一個被包裹在 class 中,另一個由於 C 兼容性而位於全局命名空間中。
//C Code File
typedef enum
{
C_Enum_first = 0,
C_Enum_Second,
} C_Enum_T
//(obviously) C++ Code file
class CMyClass
{
public:
enum class CPP_Enum
{
first= 0,
second,
};
CPP_Enum& operator= ( const C_Enum_T& rhs);
}
現在我在全局命名空間 scope 有一個 function 以 Cpp Enum 作為參數
bool FooFunc(const CMyClass::CPP_Enum value);
但是,由於與 C 代碼的兼容性問題,在某些地方此 function 將使用 C 枚舉值調用
bool res = FooFunc(C_Enum_Second);
這給了我一個未知的轉換錯誤。 是的,我知道我可以重載,但出於演示目的,我只展示了 1 個枚舉參數。 實際上,有 3 個枚舉會增加我需要的重載。 為什么我的賦值運算符沒有被調用? 賦值運算符不能在 function arguments 上隱式工作嗎?
謝謝你的幫助
問候朱利安:)
賦值運算符不能在 function arguments 上隱式工作嗎?
您的operator=
是CMyClass
的成員。 可以這樣調用:
CMyClass cmc;
C_Enum_t a;
CPP_Enum& x = (cmc = a);
但不會考慮從CMyClass
到CPP_Enum
的隱式轉換。 考慮改用免費的 function 進行轉換。 此外,您的operator=
返回參考也很可疑。 您沒有包含實現,但返回引用看起來不正確。 它應該指什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.