【问题标题】:Getting a functor as argument in C++11在 C++11 中获取函子作为参数
【发布时间】:2020-06-13 22:44:55
【问题描述】:

我希望运行以下代码:

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】:

    做起来

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

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

    【讨论】:

    • 但是为什么两个分开,有什么区别呢?
    • 您有两个模板在使用,所以有两个 template 关键字实例。毕竟,您在声明该函数时也写了两次templatetemplate &lt;typename T&gt; class Matrix { template &lt;typename Function&gt; Matrix apply(Function); }; 定义反映了声明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多