Я хотел бы использовать boost:: array как член класса, но я не знаю его размер во время компиляции. Я думал о чем-то подобном, но это не работает:
int main() {
boost::array<int, 4> array = {{1,2,3,4}};
MyClass obj(array);
}
class MyClass {
private:
boost::array<int, std::size_t> array;
public:
template<std::size_t N> MyClass(boost::array<int, N> array)
: array(array) {};
};
В компиляторе gcc говорится:
error: type/value mismatch at argument 2 in template parameter list for
‘template<class _Tp, long unsigned int _Nm> struct boost::array’
error: expected a constant of type ‘long unsigned int’, got ‘size_t’
Это, очевидно, означает, что в качестве членов класса нельзя использовать массивы переменного размера. Если это так, это отрицает все преимущества boost:: array над векторами или стандартными массивами.
Можете ли вы показать мне, что я сделал не так?