我的母语是 C#,所以当我开始使用 C++ 时,我想为 C# 中可用的库使用者创建 get/set 糖语法。
所以我写...
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;
.
.
.
};
但是,Netbeans 上的 C/C++ 添加(我相信这是 g++ 编译器)声称我正在实例化没有类型的 GetProperty。
根据谷歌搜索,如果有人忘记了 using 语句或包含标题等,就会发生这种情况。
但 int 是一个原语,所以这不可能。
这是怎么回事?