私の母国語はC#なので、C ++を使い始めたとき、C#で使用できるライブラリコンシューマー用のget /setsugar構文を作成したいと思いました。
だから私は書いた...
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をインスタンス化していると主張しています。
Googleの検索によると、これは誰かがusingステートメントを忘れたり、ヘッダーなどを含めたりした場合に発生します。
ただし、intはプリミティブであるため、これは不可能です。
どうしたの?