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);
但不会考虑从CMyClass
到CPP_Enum
的隐式转换。考虑改用免费函数进行转换。另外,您的 operator=
returns 参考也很可疑。您没有包含实现,但返回引用看起来不正确。应该指什么?
我正在做一个项目,部分 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);
但不会考虑从CMyClass
到CPP_Enum
的隐式转换。考虑改用免费函数进行转换。另外,您的 operator=
returns 参考也很可疑。您没有包含实现,但返回引用看起来不正确。应该指什么?