通过指向它的指针调用模板方法
Calling template method through a pointer to it
我有下一个错误:
C2064 term does not evaluate to a function taking 1 arguments LINE 33
调用函数"param.c1(x)"失败。但为什么?似乎无法推断函数 "c1_1_order_()" 接受 1 个参数,或者我在函数 "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;
}
};
"Source.cpp"
#include "Header.h"
double p(double x) { return x; }
int main() {
TMA a(p);
double h = 1.0;
a.TMA_solve(h);
return 0;
}
param.c1(x);
c1
是一个 class 方法指针。 class 方法指针不是函数指针,它不能被自己调用。必须使用 .*
或 ->*
运算符调用 class 方法指针,在 instance/pointer 到相关 class 上。例如:
(param.*(param.c1))(x);
这是否是正确的应用程序,或者是否必须通过指针调用不同对象的方法,就像那样,是您需要弄清楚的事情。
显示的代码还存在其他问题:
U c1_1_order_(double) {
return obj->p(x);
}
这里没有声明对象x
。
我有下一个错误:
C2064 term does not evaluate to a function taking 1 arguments LINE 33
调用函数"param.c1(x)"失败。但为什么?似乎无法推断函数 "c1_1_order_()" 接受 1 个参数,或者我在函数 "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;
}
};
"Source.cpp"
#include "Header.h"
double p(double x) { return x; }
int main() {
TMA a(p);
double h = 1.0;
a.TMA_solve(h);
return 0;
}
param.c1(x);
c1
是一个 class 方法指针。 class 方法指针不是函数指针,它不能被自己调用。必须使用 .*
或 ->*
运算符调用 class 方法指针,在 instance/pointer 到相关 class 上。例如:
(param.*(param.c1))(x);
这是否是正确的应用程序,或者是否必须通过指针调用不同对象的方法,就像那样,是您需要弄清楚的事情。
显示的代码还存在其他问题:
U c1_1_order_(double) {
return obj->p(x);
}
这里没有声明对象x
。