似乎boost::multi_array<T, n>
要求T
具有无参数构造函数。请考虑以下示例。
#include <boost/multi_array.hpp>
class ConstructorHasArguments {
ConstructorHasArguments(int arg) {};
}
int main() {
boost::multi_array<ConstructorHasArguments, 1> foo;
return 0;
}
这会导致编译错误。
no matching function for call to ‘ConstructorHasArguments::ConstructorHasArguments()
问题在于,当boost::multi_array<T,n>
的复制构造函数尝试为副本分配空间时,它会尝试调用T()
。当然,我可以在我的班级中添加一个无参数的构造函数。但是如果我有一个没有参数构造函数的类没有意义呢?
当T没有无参数构造函数时,是否有一种使用boost :: multi_array的简单方法?
答案 0 :(得分:1)
不仅是复制构造函数 - 实际上boost::multiarray
的所有构造函数都会调用allocate_space()
,而std::uninitialize_fill_n(base, allocated_elements_, T());
会调用boost::multi_array
。因此,这里需要一个没有参数的构造函数。如果您仍想使用boost-1.46.0
,我认为没有办法绕过它。 (我指的是boost::multi_array_ref
的源代码。)
替代方案可能是这样的:您自己分配和初始化空间。然后将地址传递给{{1}}。在这种情况下,您将需要管理内存。