テンプレートクラスの `` boost :: array_view``のtypedefを作成する方法
-
23-12-2019 - |
質問
寸法の不具合テンプレート(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」キーワードを入れる必要があるのですか?
所属していません StackOverflow