3
我有不同類型的矩陣,我想創建一個廣義的子矩陣參考類MatrixRef
。使用sfinae啓用/禁用typedef是不可能的。解決方法?
矩陣實現只有幾個成員的像row(i)
,column(i)
,diagonal()
等和道定義相應的類型row_vector
等
在MatrixRef
我想,如果模板參數C還沒有例如定義col_vector
,MatrixRef
也沒有定義col_vector
。或者作爲變通方法定義它void
。
對於函數成員我發現了一個工作的解決方案,但在類型定義沒有。
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();
};