次のことがうまくいかない理由を頭に入れようとしています。std :: vectorがあり、それに含まれているvalue_typeの静的メンバー関数を次のように呼び出したいと思います。
std::vector<Vector> v;
unsigned u = v.value_type::Dim();
ここで、Vectorは実際にはテンプレート化された型のtypedefです。
template <typename T, unsigned U> class SVector;
typedef SVector<double, 2> Vector; //two-dimensional SVector containing doubles
静的メンバー関数Dim()は、実際にはVectorの次元Uをインライン化します。
これで、コンパイラは次のようなエラーメッセージを返します。
error: ‘SVector<double, 2u>’ is not a base of
‘std::vector<SVector<double, 2u>, std::allocator<SVector<double, 2u> > >
それは私を困惑させます。明らかに問題のある行を次のように置き換えることができます
unsigned u = Vector::Dim();
それは機能しますが、vのvalue_typeに関する仮定をハードコードしているため、明らかに醜いです...ありがとう!