C++ 通过自定义赋值运算符隐式转换函数参数
c++ implicitly convert function arguments via custom assignment operator
我正在做一个项目,部分是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);
但它不会被考虑用于从CMyClass
到CPP_Enum
的隐式转换。请考虑改用免费函数进行转换。此外,您的operator=
返回引用也是相当可疑的。您没有包含实现,但返回引用看起来不正确。它应该指什么?
相关文章:
- 转换函数,将 std::数组的双精度作为参数或双精度作为参数单独转换
- C++:用户定义的显式类型转换函数错误
- 为什么下面带有非常量转换函数的代码没有歧义?
- 为什么转换函数声明不需要至少一个定义类型说明符
- PCL:当我在setConditionFunction中使用std::bind 时,没有合适的转换函数
- C++ 通过自定义赋值运算符隐式转换函数参数
- 当我使用 void 函数的返回值(通过强制转换函数指针)时,究竟会发生什么?
- 在C++中自动向下转换函数参数
- static_cast:转换函数模板——它们真的有效吗
- 通过像printf这样的可变参数函数传递一个带有常量字符*转换函数的类
- 隐式转换函数的返回对象时是否会影响性能?
- C++不存在合适的转换函数
- 为什么允许 int 和 const int 使用不同的转换函数?
- 使用转换函数直接初始化
- 为什么用户定义的转换函数模板不能有推导的返回类型?
- 为什么我会收到转换函数错误
- 选择用于赋值初始化的转换函数的优先级
- 我收到错误:没有合适的转换函数从 std::basic_istream<char、std::char_traits<char>> 到 char 存在
- 具有转换函数的 lambda,指向具有 C++ 链接的函数的指针
- 使用模板和部分专用化生成类型转换函数