我有不同类型的矩阵,我想创建一个通用的子矩阵参考类MatrixRef
。
矩阵只实现了一些成员,如,row(i)
等,当然还定义了相应的类型等。column(i)
diagonal()
row_vector
在MatrixRef
我想要的情况下,如果模板参数 C 没有定义 eg 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();
};