float x[size][2];
这是行不通的,因为声明的数组不能具有运行时大小。尝试一个向量:
std::vector< std::array<float, 2> > x(size);
或者使用新的
// identity<float[2]>::type *px = new float[size][2];
float (*px)[2] = new float[size][2];
// ... use and then delete
delete[] px;
如果您没有可用的 C++11,您可以使用boost::array
代替std::array
.
如果您没有可用的 boost,请创建自己的数组类型,您可以将其插入向量
template<typename T, size_t N>
struct array {
T data[N];
T &operator[](ptrdiff_t i) { return data[i]; }
T const &operator[](ptrdiff_t i) const { return data[i]; }
};
为了简化语法new
,你可以使用identity
模板实际上是一个就地 typedef(也可以在boost
)
template<typename T>
struct identity {
typedef T type;
};
如果需要,您还可以使用向量std::pair<float, float>
std::vector< std::pair<float, float> > x(size);
// syntax: x[i].first, x[i].second