2

似乎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 ?

4

1 回答 1

1

它不仅是复制构造函数——实际上所有的构造函数boost::multiarray都会调用allocate_space(),然后依次调用std::uninitialize_fill_n(base, allocated_elements_, T());。因此这里需要一个没有参数的构造函数。如果您仍想使用boost::multi_array. (我指的是源代码boost-1.46.0。)

另一种选择可能是这样的:您自己分配和初始化空间。然后将地址传递给boost::multi_array_ref. 在这种情况下,您将不得不管理内存。

于 2012-11-18T10:14:28.393 回答