Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;11_C++_Class_C++11_Generics_Functor - Fatal编程技术网

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);}定义镜像声明。