通过指向它的指针调用模板方法

时间:2016-09-25 18:24:21

标签: c++ templates function-pointers

我有下一个错误:

  

C2064术语不评估为采用1个参数LINE 33的函数

它无法调用函数" param.c1(x)"。但为什么?似乎它不能推断出函数" c1_1_order _()"取一个参数或在函数" config_1_order()"中做错误的赋值。

文件" Header.h"

#include <vector>
using std::vector;

class TMA {
private:
  double(*p)(double);

  template<class U>
  struct SLAU_params {
  private:
    TMA * obj;

    U c1_1_order_(double x) {
      return  obj->p(x);
    }

    void config_1_order() {
      c1 = &TMA::SLAU_params<U>::c1_1_order_;
    }
  public:
    SLAU_params(TMA * obj) :obj(obj) {
      config_1_order();
    }

    U(TMA::SLAU_params<U>::* c1)(double);
  };
public:
  TMA(double(*p)(double)) :p(p) {}

  template<class U>
  vector<U> TMA_solve(U h) {
    double x = h;
    SLAU_params<U> param(this);
    param.c1(x);
    vector <U> rez;
    return rez;
  }
};

&#34; Source.cpp&#34;

#include "Header.h"
double p(double x) { return x; }
int main() {
  TMA a(p);
  double h = 1.0;
  a.TMA_solve(h);
  return 0;
}

1 个答案:

答案 0 :(得分:5)

for(var i = 0; i < buttons.length; i++){
    buttons[i].classList.add('hidden');
}

param.c1(x); 是一个类方法指针。类方法指针不是函数指针,它不能自己调用​​。必须使用c1.*运算符,在有关类的实例/指针上调用类方法指针。例如:

->*

这是否是正确的应用程序,或者是否必须通过指针调用不同的对象方法,这是你需要弄清楚的事情。

显示的代码还存在其他问题:

(param.*(param.c1))(x);

此处未声明对象 U c1_1_order_(double) { return obj->p(x); }