我有一個使用std::vector
的std::vector
的矩陣類。 我想允許使用matrix[i][j]
語法,但不能在接口中分解std :: vector,所以我創建了一個Row類。矩陣示例中的正確性正確性
template <typename T>
class Row {
public:
explicit Row(std::vector<T>& value): value(value) {
}
T& operator [] (size_t index) {
return value[index];
}
private:
std::vector<T>& value;
};
template <typename T>
class Matrix {
public:
Matrix(std::size_t n, std::size_t m, const T& value = T()): value(n, std::vector<T>(m, value)) {
}
// irrelevant functions
Row<T> operator [] (size_t index) {
return Row(value[index]);
}
private:
std::vector<std::vector<T>> value;
};
一切都很好,直到我想與const矩陣工作。如果我有一個const矩陣,我不能創建,因爲我只有const operator []
外部向量(所以只有const vector<T>&
),如果我將 ctor參數更改爲const vector<T>&
我將無法返回T &。
我知道我可以創建一個類ConstRow,它具有完全相同的功能,只是它會得到/返回const refs,但是可以在不創建新類的情況下很好地解決這個問題嗎?
這聽起來像一個參數:( – RiaD