通过指向模板方法的指针调用模板方法
Calling template method through a pointer to it
我有下一个错误:
C2064 term不计算为带1个参数的函数
调用函数"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
是一个类方法指针。类方法指针不是函数指针,它不能被自己调用。类方法指针必须在指向相关类的实例/指针上使用.*
或->*
操作符调用。例如:
(param.*(param.c1))(x);
这是否是正确的应用程序,或者是否必须通过指针调用不同对象的方法,这些都是您需要弄清楚的。
所示代码还存在其他问题:
U c1_1_order_(double) {
return obj->p(x);
}
这里没有声明对象x
。
相关文章:
- C++11:模板方法的模板函数调用无法编译?
- 基于枚举参数调用专用模板方法
- 从非模板类调用专用模板方法
- 从部分专用模板方法调用模板非静态方法
- 模板方法在C++中相互调用
- 调用模板方法会导致'operator<'不匹配
- 如何让一个C++模板类调用另一个类的方法?
- 从专用模板方法调用无专门化的模板方法
- P/调用<T> C# 中的模板方法C++
- 从另一个模板对象调用模板方法时出现奇怪的编译行为
- C++调用派生类中基序列的模板方法
- 当类型未知时调用模板方法
- 在模板类中调用模板方法
- C++多态性模板类:调用基类方法而不是派生类
- 从基非模板类调用派生模板类方法
- 如何使用模板参数选择方法调用
- "Unable to resolve template based identifier X" - 从模板类调用模板参数类的方法 (C++)
- 在模板中调用对象的方法
- C++代码与模板方法调用混淆
- 从C++中的另一个模板方法调用模板方法