2012-09-29 84 views
0

據說如果我們想更有效地使用multi_array,我們最好使用multi_array構建器。然而,我對模板和提升都很新,我試圖從書中複製一些代碼。它看起來像這樣:編譯boost :: 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

感謝您的回覆。但是,它不起作用。在'* mp''和'沒有匹配的函數調用'boost :: type >>時,我仍然得到2個錯誤,例如'不匹配'operator *' :: type(boost :: multi_array > *)''候選是:boost :: type > :: type () – user957121