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;