【发布时间】:2008-10-13 11:03:06
【问题描述】:
我试图弄清楚为什么以下内容不起作用。我有一个 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 的假设...... 谢谢!
【问题讨论】: