在我的矩阵类有太多的情况下,
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)
有没有办法做到这一点? 还是有更好的方法来做到这一点?
谢谢。
更新我正在寻找一种通用的方式来做到这一点。 这样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