c++左赋值操作符
c++ left hand assignment operator
我有一个类(它应该包含任何值),像这样:
class Value
{
public:
Value();
Value(const Value& value);
virtual ~Value();
void operator= (const Value& value);
template<class T>
void operator= (T value);
...
}
现在我的问题是:
为什么我不能像这样为这个类实现一个赋值操作符:
template<class T>
void operator=(T& value, const Value& v)
{...}
我想设计一个类,它的工作方式如下:
Value v;
v = 'c';
v = 13;
v = 5.6;
int i = 5;
v = &i;
int y = v;
char b = v;
我想把任何数据类型放入和取出它。目前,这可以很好地用于:
v = 'c';
v = 13;
v = 5.6;
但不适合:
int y = v;
起作用的是:
int y = v.get<int>();
但这不如
好int y = v;
将通过向类中添加模板类型强制转换,可以很容易地修复编译错误,如下所示:
class Value
{
...
template <class T> operator T();
};
Value va;
int i = va;
我仍然相信你会发现自己实现'boost::any'的任务很有挑战性,但为什么不呢?:)
因为标准规定赋值操作符必须是只有一个形参的成员函数。
13.5.3$1 Assignment [over.ass]:
赋值操作符应由只有一个形参的非静态成员函数实现。
可以实现如下类型转换操作符
operator int()
{
if(current_value_is_not_int)
throw MyException("Current value is not int");
//return int value
}
相关文章:
- c++中的重载赋值操作符
- c++类继承和赋值操作符
- 带引用类成员的赋值操作符
- 复制构造函数,赋值操作符重载
- c++派生类赋值操作符
- 通过调用Move赋值操作符实现Move构造函数
- 带有映射的赋值操作符
- 单参数构造函数和赋值操作符
- 如何从复制赋值操作符调用复制构造函数
- c++复制构造函数,重载赋值操作符,方法get()
- 用于具有const数据成员的类的move和右值赋值操作符
- 类赋值操作符和复制构造函数
- 赋值操作符重载
- 影响正确性的move构造函数/赋值操作符示例
- 当类是子类时重载赋值操作符
- 如果没有定义Move语义(Move构造函数和Move赋值操作符),编译器是否默认优化
- 在类赋值操作符函数中,为什么必须返回*this ?
- 模板类的重载赋值操作符
- 使用重载赋值操作符
- 类和向量的重载赋值操作符