我试图弄清楚为什么以下不起作用。我有一个 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 的假设......谢谢!