c++泛型右值重载
C++ generic rvalue overload
我目前正在尝试重构一些使用原始类型的代码,我可以将setter和getter放入其中。我想让底层代码的改变透明,一开始我认为c++的操作符重载会帮我解决这个问题。
让我们假设我想创建一个"增强的int
"类型,例如,它可以像普通的int
一样处理,但允许在我对其赋值的任何地方进行进一步的操作,并且只是赋值- int
的所有其他属性,例如与+=
相加,都应该保留。
起初,我首先想到,如果我将int
封装在某个结构体中,并填充operator=
重载,我就会设置,就像下面的例子一样:
#include<iostream>
typedef struct PowerInt{
int x;
PowerInt(){
cout << "PowerInt createdn";
x = 0;
}
~PowerInt(){
cout << "PowerInt destroyedn";
}
void operator=(int other){
cout << "PowerInt received " << other << "n";
this->x = other;
}
}PowerInt;
int main(){
PowerInt a;
a = 3;
return 0;
}
代码按预期编译并运行,但是一旦我尝试做任何其他常规int可以做的事情,如cout << a
或a += 2
,甚至是简单的int b = a;
赋值,编译器就会抱怨缺少操作符<<
和+=
。
好了;然后我认为,至少对于<<
和"分配=
",我可以通过使用某种"泛型右值运算符"来获得,或者某种方法返回PowerInt.x
,无论我的a
用作右值,自动使int c = (a + 3);
和if (a == 3) {}
等表达式有效。
问题是,我找不到实现这个习惯用法的方法,这很可能与我对c++中操作符重载如何工作的理解很少有关,或者与我还不知道的一些语言特性有关。有可能完成我在这里尝试的事情吗?
如果您希望将PowerInt
转换为正常的int
,您可以创建一个用户定义的转换操作符:
operator int() const
{
return x;
}
任何未为PowerInt
定义的操作符将使用为正常int
定义的操作符。
p。C++中不需要typedef struct
相关文章:
- 泛型枚举和其他类型的重载模板函数
- 可变参数泛型 lambda 和函数重载
- 模板函数重载(泛型类型与模板模板类型)选择正确的重载
- 重载泛型类型的模板类时检查运算符=时的自赋值
- 在泛型编程C++重载增量运算符
- C# 泛型 - 基于类型特征的重载
- 重载泛型类型的函数与给定类型及其子级的函数
- 用于重载的泛型类成员函数
- 如何在main中重载运算符>泛型类.cpp
- 泛型参数的模板或函数重载
- c++泛型运算符重载
- 泛型继承和重载运算符+
- 模板泛型树类的模板迭代器的c++操作符重载
- 如何强制.net (c#)使用方法的非泛型重载?
- c++泛型右值重载
- 如何用泛型类中的友元函数重载操作符
- 动态强制转换可以在泛型函数中完成而不是重载吗?
- 泛型数组的重载[]和=操作符
- 如何使用泛型模板重载类的运算符
- C++泛型输出运算符重载