簡體   English   中英

c++ 通過自定義賦值運算符隱式轉換 function arguments

[英]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);

但不會考慮從CMyClassCPP_Enum的隱式轉換。 考慮改用免費的 function 進行轉換。 此外,您的operator=返回參考也很可疑。 您沒有包含實現,但返回引用看起來不正確。 它應該指什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM