在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'的成員變量(並且調用析構函數兩次可能會導致其他運行時崩潰,儘管不太可能這個例子)。 –