c ++通过自定义赋值运算符隐式转换函数参数

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);
}

现在我在全局命名空间范围内有一个函数,将 Cpp 枚举作为参数

bool FooFunc(const CMyClass::CPP_Enum value);

然而,由于与 C 代码的兼容性问题,有些地方将使用 C 枚举值调用此函数

bool res = FooFunc(C_Enum_Second);

这给了我一个未知的转换错误。 是的,我知道我可以超载,但出于演示目的,我只显示了 1 个枚举参数。实际上有 3 个枚举会增加我需要的重载。 为什么我的赋值运算符没有被调用?赋值运算符不能隐式地作用于函数参数吗?

谢谢你的帮助

问候朱利安 :)

Do assignment operator not work implicitly on function arguments?

您的 operator=CMyClass 的成员。可以这样调用:

CMyClass cmc;
C_Enum_t a;
CPP_Enum& x = (cmc = a);

但不会考虑从CMyClassCPP_Enum的隐式转换。考虑改用免费函数进行转换。另外,您的 operator= returns 参考也很可疑。您没有包含实现,但返回引用看起来不正确。应该指什么?