c++左赋值操作符

c++ left hand assignment operator

本文关键字:赋值操作符 c++      更新时间:2023-10-16

我有一个类(它应该包含任何值),像这样:

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
}