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
.
Если у вас нет буста, создайте свой собственный тип массива, который можно вставить в вектор
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