C++ 在C++;11
我希望运行以下代码:C++ 在C++;11,c++,class,c++11,generics,functor,C++,Class,C++11,Generics,Functor,我希望运行以下代码: class SignedSquareRoot { public: int operator()(int val) { return val >= 0 ? sqrt(val) : -sqrt(-val); }; } 所以我在课堂上写了以下内容: 声明: template<class Function> Matrix<T> apply(Function function); 模板 矩阵应用(函数)
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;
}
模板
矩阵矩阵::应用(函数){
矩阵out=*这个;
int size=this->size();
对于(int i=0;i
但我遇到了很多错误,比如:
错误:模板重新声明中的模板参数太多
模板
注意:前面的模板声明在这里
模板
如何解决这个问题?去做吧
template <typename T>
template <typename Function>
Matrix<T> Matrix<T>::apply(Function function) { ... }
模板
模板
矩阵矩阵::应用(函数){…}
您需要两套独立的模板参数,一套用于类模板,另一套用于该类的成员函数模板。但为什么两套独立,有什么区别?您有两套模板,所以有两个
模板的实例。毕竟,在声明该函数时,您也编写了两次template
:template class Matrix{template Matrix apply(function);}代码>定义镜像声明。