我想使用 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 相对于 vector 或标准数组的所有优势。
你能告诉我我做错了什么吗?
最佳答案
Boost 的数组是基于第二个模板参数的固定大小的,boost::array<int,4>
是与 boost::array<int,2>
不同的类型 .您不能拥有其成员具有不同类型的同一类(在您的示例中为 MyClass)的实例。
然而,std::vectors 可以有不同的大小而不是不同的类型:
struct MyClass {
template<std::size_t N>
explicit
MyClass(boost::array<int, N> const& array)
: data(array.begin(), array.end())
{}
private:
std::vector<int> data;
};
int main() {
boost::array<int, 4> a = {{1,2,3,4}};
MyClass obj(a);
boost::array<int, 2> a2 = {{42,3}};
MyClass obj2(a2);
// notice obj.data.size() != obj2.data.size()
return 0;
}
也就是说,boost::array 仍然有用(它甚至在本示例代码中也很有用),只是不是以您想要使用它的确切方式。
关于c++ - 如何使用大小未知的 boost::array 作为对象变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2031940/