C++库研究笔记—— 对function类定义的修正

来源:互联网 发布:java当前时间加24小时 编辑:程序博客网 时间:2024/05/16 13:41

在写一个数值优化库tau, 这是一个很小的改动,却事关系全局,是一个有意义的改动


template <typename T>class function{public:    //array1d<real> x0(2, 1.0f);    //function(x0,g0), 检测不出 x0 与 eval中的dim 是否一致    T operator()(const array1d<T>& x, array1d<T>& g)const    {        size_t N=x.size();        g.resize(N);        assert(g.data());        assert(x.data());        return eval(x.size(), x.data(), g.data());    }    virtual T   eval(size_t dim, const T *x, T *g) const =0;};


修正后:

template <typename T>class function{public:    T operator()(const array1d<T>& x, array1d<T>& g)const    {        size_t N=x.size();        if(N!=dim())            throw tau::dimension_exception("dimensions mismatch!");        g.resize(N);        assert(g.data());        assert(x.data());        return eval(x.data(), g.data());    }    virtual size_t  dim() const =0;    virtual T       eval(const T *x, T *g) const =0;    virtual ::std::string functionName()const { return "f(x)"; }    virtual ::std::string gradientName()const { return "f'(x)"; }};




原创粉丝点击