質問

寸法の不具合テンプレート(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は、このクラスindex_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;
                                                   ^
.

役に立ちましたか?

解決

ドキュメントビュー、ビュータイプの定義を次のように表示できます。

  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が実際にはクラステンプレートであることを指定する必要があります。それ以外の場合、コンパイラは完全に定義されたタイプであることを期待しています。

他のヒント

従属名のtypenameおよび/または.templateの資格を必要とします。

typedef typename array_type::array_view<dimensions-1>::type stride_type;
.

依存名にテンプレートメンバーを使用している場合は、.templateの資格が必要です。

obj.template foo<T>();
.

背景のための非常に人気のある回答を見てください

どこで、「テンプレート」と「typename」キーワードを入れる必要があるのですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top