无法初始化boost :: multi_array <t,n =“”>除非T具有无参数构造函数</t,>

时间:2012-11-17 22:04:49

标签: boost copy-constructor boost-multi-array

似乎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的简单方法?

1 个答案:

答案 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}}。在这种情况下,您将需要管理内存。