在C++中,我试图用C++实现我自己的any
类。但是,在我能够测试它之前(所以如果我的实现不好,请随时纠正我),我得到了错误:error C2228: left of '.val' must have class/struct/union
两次使用两次value()
函数,这似乎很奇怪,当它在其他地方工作。我能想到的唯一的事情将是decltype
盈函数导致一个错误,但它不应该:在异常情况下,C++错误C2228('.val'的左边必须有class/struct/union)
编辑:我已经更新改变变量为template<class T> any(T V){...}
构造
class any{
protected:
template<class T> struct variable{
public:
T val;
variable(){}
variable(T t) : val(t){}
};
variable<int> v;
public:
any(){
v.val = 0;
}
template<class T> any(T V){
variable<T> nV(V);
v = nV;
}
~any(){
delete &v;
}
decltype(v.val) value(){ // Error still here
return v.val;
}
template<class T> static any create(T V){
return any(V);
}
};
'T = NewT;'是无效的语法。 'T!= decltype(v.val)'也不是。将第二个替换为'std :: is_same :: value'。 –
2014-01-06 19:01:18
你不能像这样改变模板的类型,类型是硬编码的。 – dutt
'〜any(){delete&v; }'不会做你认为它所做的事情。这将尝试通过全局运算符delete来释放内存,这将会(很可能)在运行时崩溃,因为'v'没有用全局分配器new进行分配。你可能想要'v。〜variable()',尽管在这种情况下已经完成了,因为'v'是'any'的成员变量(并且调用析构函数两次可能会导致其他运行时崩溃,尽管不太可能这个例子)。 –