0 c++ operator-overloading assignment-operator
我想为"int","long"等类型重载赋值运算符.也就是说,我想使用如下代码:
class CX {
private:
int data;
...
};
CX obj;
int k;
k = obj; // k should get the value of obj.data
Run Code Online (Sandbox Code Playgroud)
显然,赋值运算符不能成为友元函数.我如何实现上述目标?
我可能错过了一些简单的东西,但却无法弄清楚这样做的语法/方法.
另外,一个IMP限制 - 我们不能使用get/set方法因为::在发布代码中,我们将CX typedefed作为int或long(根据需要),但在DEBUG代码中,我们希望将它作为一个类(用于自动)在数千个地方进行类型检查).代码需要很常见.原因是如果CX成为一个类,编译器(至少我们使用的版本)在某种程度上无法优化所有操作.
一个问题是 - 我不想让它通过:
CX x; long p; p = x;
Run Code Online (Sandbox Code Playgroud)
我假设下面的转换解决方案将隐式地使长/短等代码也通过.(如果没有,那么它正是我要找的!).
在相关的说明中,回答David的问题 - 我想重构的原因是 - 我们希望能够将CX切换为32位或64位.因此,我们希望禁止任何隐式转换并在编译时捕获它们.现在,相反 - (disallowiong
CX x = some_64_bit_int;
但允许
CX x = some_32_bit_int;
我通过使用templatized =运算符来实现,该运算符默认情况下在编译时断言,但是将其重载为我想要的类型.
如果您认为这是一个糟糕的设计或我应该尝试其他替代方案 - 我需要的原因是:我们有数千行遗留代码,其中某些东西只是键入"int".
typedef int CX;
Run Code Online (Sandbox Code Playgroud)
整个地方都有作业,如:
CX x; int k; k = x; // Writing the simplified relevant code here
Run Code Online (Sandbox Code Playgroud)
我正在开发一个将CX改为班级的项目.在第一阶段,我们希望修复所有编译错误(使CX成为一个类),尽可能少地对代码进行更改.
Nik*_*nić 16
如果你想要的只是转换为int,你可以在你的类中添加一个强制转换操作符.
class ABC
{
public:
operator int() { return data; } // cast operator
private:
int data;
...
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4375 次 |
| 最近记录: |