在C ++ 11中将函子作为参数

问题描述 投票:-1回答:1

我希望运行以下代码:

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;
    }

但是我遇到很多类似的错误:

错误:模板重新声明中有太多模板参数 模板

注意:以前的模板声明在这里 模板

如何解决此问题?

c++ class c++11 generics functor
1个回答
3
投票

制作

template <typename T>
template <typename Function>
Matrix<T> Matrix<T>::apply(Function function) { ... }

您需要两组独立的模板参数,一组用于类模板,另一组用于该类的成员函数模板。

© www.soinside.com 2019 - 2024. All rights reserved.