我的母語是C#,所以當我開始使用C++時,我想爲C#中可用的庫消費者創建get/set糖語法。iso C++禁止通用類型聲明
所以我寫了...
template<typename T>
class GetProperty
{
private:
T (*get)();
public:
GetProperty(T (*get)())
{
this->get = get;
}
operator T()
{
return get();
}
template<typename S, typename T>
GetProperty<S> operator=(GetProperty<T> fool)
{
throw 0;
}
};
然後,利用這一點,我寫的代碼:
template<typename T>
class Vector
{
private:
struct LinkItem
{
public:
T* Item;
LinkItem* Next;
GetProperty<int> Length (&getLength);
LinkItem(T* Item = NULL, int length = 1, LinkItem* Next = NULL)
{
this->Item = Item;
this->length = length;
this->Next = Next;
}
LinkItem& operator =(LinkItem rhs)
{
this->Item = rhs.Item;
this->length = rhs.length;
this->Next = rhs.Next;
return *this;
}
private:
int length;
int getLength()
{
return length;
}
};
LinkItem* current;
.
.
.
};
然而,C/C++另外的NetBeans(我相信這是g ++編譯器)聲稱我沒有類型實例化GetProperty。
根據Google搜索,如果有人忘記了使用聲明或包含標題等,則會發生這種情況。
但是int是原語,所以這不可能。
發生了什麼事?
'junior.goeat();' – Jack
此代碼根本無法編譯:http://ideone.com/qfH21 –
@MooingDuck:謝謝。 – Jack