Ошибка компиляции на boost :: multi_array builder

Говорят, что нам лучше использовать конструктор multi_array, если мы хотим использовать multi_array более эффективно. Тем не менее, я настолько новичок в шаблонах и надстройках, что попытался скопировать код из книги. Это выглядит так:

class multi_builder : boost::noncopyable
{
public:
typedef boost::multi_array<T,N> array_type;
typedef boost::shared_ptr<array_type > type;
private:
boost::any ext;
public:
multi_builder() : ext(boost::extents){}
~multi_builder(){}
template<std::size_t n>
void dim(std::size_t x)
{
BOOST_STATIC_ASSERT(n >= 0 && n < N);
ext = boost::any_cast<boost::detail::multi_array::extent_gen<n> >(ext) [x];
}
boost::type create(void)
{
return boost::type<array_type>(new array_type(boost::any_cast<boost::detail::multi_array::extent_gen<N> >(ext)));
}
};

Тем не менее, когда я попытался использовать его в коде так:

multi_builder<int,2> builder;
builder.dim<0>(2);
builder.dim<1>(2);
BOOST_AUTO(mp,builder.create());
for(int i = 0,v = 0; i < 2; ++i)
for(int j = 0; j < 2; ++j)
(*mp)[i][j] = v++;

компилятор генерирует следующие ошибки:

error:invalid use of template-name 'boost::type' without an argument list
error:'class multi_builder<int, 2u>' has no member named 'create'.
error:invalid type in declaration before '=' token
error:'class multi_builder<int, 2u>' has no member named 'create'
error:invalid type argument of 'unary *'

Может кто-нибудь сказать мне, как исправить ошибки?

0

Решение

Судя по всему, тип возвращаемого значения create() отсутствует список аргументов шаблона. Я не использовал этот компонент Boost, но в зависимости от того, как возвращается значение, оно должно выглядеть примерно так:

boost::type<array_type> create(void)
0

Другие решения

Других решений пока нет …