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

c++ implicitly convert function arguments via custom assignment operator

本文关键字:转换 函数 参数 赋值运算符 自定义 C++      更新时间:2023-10-16

我正在做一个项目,部分是C写的,部分是C++写的。

我得到了 2 个基本相同的枚举,但是一个包装在一个类中,另一个由于 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 个枚举会增加我所需的过载。 为什么不调用我的赋值运算符?赋值运算符不隐式处理函数参数吗?

感谢您的帮助

问候朱利安:)

值运算符不隐式处理函数参数吗?

您的operator=CMyClass的成员。可以这样称呼:

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

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