C++ c++;左手赋值运算符

C++ c++;左手赋值运算符,c++,templates,operator-overloading,assignment-operator,C++,Templates,Operator Overloading,Assignment Operator,我有一个类(它应该包含任何值),如下所示: class Value { public: Value(); Value(const Value& value); virtual ~Value(); void operator= (const Value& value); template<class T> void operator= (T value); ..

我有一个类(它应该包含任何值),如下所示:

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)
{...}
我想把任何数据类型放入和移出它。 目前,这适用于:

v = 'c';
v = 13;
v = 5.6;
但不是为了:

int y = v;
有效的方法是:

int y = v.get<int>();

将是

,因为标准规定赋值运算符必须是只有一个参数的成员函数

13.5.3 1美元转让[超过总金额]:

赋值运算符应由一个具有一个参数的非静态成员函数实现


您可以实现这样的类型转换操作符

operator int()
{
    if(current_value_is_not_int)
        throw MyException("Current value is not int");

    //return int value
}

通过向类中添加模板类型转换,可以轻松修复编译错误,如下所示:

Value v;

v = 'c';
v = 13;
v = 5.6;
int i = 5;
v = &i;

int y = v;
char b = v;
class Value
{
...
        template <class T> operator T();
};

Value va;
int i = va;
类值
{
...
模板算子T();
};
价值va;
int i=va;

我仍然相信,您会发现自己实现“boost::any”的任务非常具有挑战性,但为什么不呢

你的问题中有错吗?您的意思是
void操作符=
?请参阅。为什么要这样实现它?您认为它能帮助您解决什么问题?只需调用函数
assign
,而不是
operator=
,一切都会很好。如果不是,那么你就有了一个更严重的设计问题。看看Boost::Any或Boost::Variant,除非你只是为了好玩。
class Value
{
...
        template <class T> operator T();
};

Value va;
int i = va;