3

次元にとらわれないテンプレート (3d と 4d の両方に役立つ) が必要です。ほとんどの操作は、最初の次元が削除された部分行列で実行されます。

だからここに私が持っていたいものがあります

template <typename element, int dimensions>
class MMapMatrixTemplate{
public:
    typedef boost::multi_array_ref<element, dimensions> array_type; 
    typedef std::array<size_t, dimensions> index_type;
    typedef array_type::array_view<dimensions-1>::type stride_type;
};

array_typeこのクラスによって管理される配列を定義する場所は、配列のインデックスに使用される型を定義します。この配列のスライスを 1 つ少ない次元で定義しindex_typeたいと思います。`stride_type

今のところ、エラーが発生します:

  include/MMapMatrix.hh:31:55: error: non-template ‘array_view’ used as template
   typedef boost::multi_array_ref<element, dimensions>::array_view<dimensions-1>::type stride_type;
                                                   ^
4

2 に答える 2

4

ビューに関するドキュメントから、ビュー タイプの定義を次のように確認できます。

  typedef typename Array::template array_view<3>::type view1_t;

これにより、コードがコンパイルされます。

#include "boost/multi_array.hpp"

template <typename element, int dimensions>
class MMapMatrixTemplate{
public:

    typedef boost::multi_array_ref<element, dimensions> array_type; 

    typedef std::array<size_t, dimensions> index_type;

    //typedef array_type::array_view<dimensions-1>::type stride_type;
    typedef typename array_type::template array_view<dimensions-1>::type stride_type;
};

int main(int argc, const char *argv[])
{

    typedef MMapMatrixTemplate<double, 4> matrix;

    return 0;
}

array_viewをそのまま使用するには、が実際にクラス テンプレートであることを指定する必要があります。それ以外の場合、コンパイラはそれが完全に定義された型であると想定します。

于 2014-02-27T10:15:20.083 に答える