在我的矩陣類有遍歷矩陣元素施加可變功能
for(size_t i = 1 ; i <= rows ; i++){
for(size_t j = 1 ; i <= cols ;j++){
//Do something
}
}
在牢記DRY原則太多的情況下,我想知道我是否能
matrix<T>::loopApply(T (*fn) (T a)){ // changed T to T a
for(size_t i = 1 ; i <= rows ; i++){
for(size_t j = 1 ; i <= cols ;j++){
_matrix[(i-1)*_rows + (j-1)] = fn(a) // changed T to a
}
}
}
這樣當我在想循環和應用的東西矩陣我只需要調用loopApply(FN)
有沒有辦法做到這一點?還是有更好的方法來做到這一點?
謝謝。
UPDATE 我正在尋找一種通用的方式來做到這一點。因此,fn不必採用單個參數等。我聽說過可變參數,但我無法理解它們是如何工作的,或者它們是否適合工作。
最少的代碼:
// in matrix.h
template <class T>
class matrix
{
public:
...
private:
...
std::vector<T> _matrix;
void loopApply(T (*fn) (T));
}
#include "matrix.tpp"
//in matrix.tpp
template <class T> // Template to template // Pointed out in comment
// loopApply as written above
一個更有用的方法是在所有的元素提供迭代器。然後你可以使用C++算法,例如'std :: for_each'。 – juanchopanza 2015-04-04 14:28:50
_「有什麼辦法可以做到這一點嗎?」_你只是寫了那個代碼。或者它不適合你? – 2015-04-04 14:29:36
@ juanchopanza謝謝。我會嘗試執行它 – nnrales 2015-04-04 14:31:23