typename T::ElementT
と
a[i]
は何を意味しています。このコード
template <typename T>
typename T::ElementT at (T const &a , T const &b)
{
return a[i] ;
}
を考えると? T:ElementT
以来
typename T::ElementT
と
a[i]
は何を意味しています。このコード
template <typename T>
typename T::ElementT at (T const &a , T const &b)
{
return a[i] ;
}
を考えると? T:ElementT
以来
typename T::ElementT
あなたがそれの前にキーワードtypename
を参照してください理由です、依存名です。 ElementT
は、タイプ、、値であることをコンパイラに伝えています。
については、を書くときに呼び出されるoperator[]
を定義したクラスであると思われます。例えば、(部分的に)ここで定義されているようT
がsample
次のようになります。T
がsample
であれば今
class sample
{
public:
typedef int ElementT; //nested type!
//...
ElementT operator[](int i)
{
return m_data[i];
}
ElementT *m_data;
//...
};
、あなたはタイプT
であるT::ElementT
などa[i]
を書くことができます。この場合、T
をサンプルとした場合、インデックスi
のタイプがint
であると仮定しています。
私は、コードTは常に演算子[]がオーバーロードされ、サブクラスDefenition ElementTを持つクラスであると推測します。これらの2つの性質を持たない他のクラスはコンパイル中にエラーを起こします。
typename T::ElementT
これはC++ FAQにthis entryにヨハネスによってexhaustingly説明します。
a[i]
この操作は通常、 "サブスクリプション" と呼ばれ、a
のi番目の要素にアクセスしています。これを行うには、a
は配列か、サブスクリプション演算子をオーバーロードするクラス(std::vector
またはstd::map
など)でなければなりません。
しかしナワズは、彼のコメントで指摘したように、a
以来タイプT
のものであり、T
ので、配列にすることはできません。この場合a
には、ネストされたタイプElementAt
が期待されています。
このコードはどこから入手できますか?それは全く役に立たないようですか?そして、それらのエラーがありました(私は 'const typename T :: ElementT'でなければならないと思いますし、' b''と 'i'')は何ですか? – sbi