我希望运行以下代码:
class SignedSquareRoot {
public:
int operator()(int val) {
return val >= 0 ? sqrt(val) : -sqrt(-val);
};
}
所以我在课堂上写下了以下内容:
声明:
template<class Function>
Matrix<T> apply(Function function);
实现:
template<class T, class Function>
Matrix<T> Matrix<T>::apply(Function function) {
Matrix<T> out = *this;
int size = this->size();
for (int i = 0; i < size; ++i) {
out.data[i] = function(out.data[i]);
}
return out;
}
但是我遇到很多类似的错误:
错误:模板重新声明中有太多模板参数 模板
注意:以前的模板声明在这里 模板
如何解决此问题?
制作
template <typename T>
template <typename Function>
Matrix<T> Matrix<T>::apply(Function function) { ... }
您需要两组独立的模板参数,一组用于类模板,另一组用于该类的成员函数模板。