さまざまな種類の行列があり、一般化された部分行列参照クラスを作成したいと考えていますMatrixRef
。
row(i)
マトリックスは、column(i)
、などのいくつかのメンバーのみを実装し、diagonal()
もちろん対応する型row_vector
などを定義します。
私MatrixRef
が欲しいのは、テンプレートパラメータ C が定義されていない場合、例えば もcol_vector
定義されMatrixRef
ていないcol_vector
ことです。または回避策として定義しvoid
ます。
関数メンバーについては、有効な解決策を見つけましたが、typedefs についてはそうではありませんでした。
struct Matrix
{
typedef vector<double>& row_vector;
//typedef ColumnContainerReference col_vector;
typedef DiagonalContainerReference diag_vector;
row_vector row(size_type i);
//col_vector col(size_type i);
diag_vector diagonal();
};
template<typename C>
struct MatrixRef
{
typedef typename C::row_vector row_vector;
typedef typename C::col_vector col_vector;
typedef typename C::diag_vector diag_vector;
template<typename C1 = C>
typename enable_if<is_matrix<C1>::has_rows, row_vector>::type
row(size_type i);
...... col(size_type i);
...... diagonal();
};