将成员函数(非静态)作为参数传递给模板函数
Passing member function (non-static) as a parameter to template function
我正在尝试定义一个指向非静态成员函数的指针,并将指针与类对象一起传递给模板函数,该函数将再次发送成员函数以进行模板结构操作。它一直给我类型不匹配错误。请帮忙!
澄清:"vecfunc"是类PTSolver的非静态成员函数。它作为输入向量和输出向量。我想将指向这个 vecfunc 的指针作为模板函数 'newt' 的参数传递给模板函数 'newt',它也将向下传递给模板结构操作 'fmin()'。在整个传递过程中,我需要提供有关 PTSolver 对象"ptsolver"的信息,因为它不是静态成员函数。但我做不到...
template <class T>
struct NRfmin {
VecDoub fvec;
T &func;
int n;
NRfmin(T &funcc) : func(funcc) {}
double operator() (VecDoub_I &x) {
n=x.size();
double sum=0.0;
fvec=func(x);
for (int i = 0;i<n;i++) sum += SQR(fvec[i]);
return 0.5*sum;
}
};
template <class T>
void newt(VecDoub_IO &x, bool &check, T &vecfunc, PTSolver &obj){
NRfmin<T> fmin(obj.*vecfunc);
VecDoub &fvec=fmin.fvec;
f=fmin(x);
...
}
class PTSolver {
public:
PTSolver() = default;
virtual ~PTSolver() = default;
void solve();
VecDoub vecfunc(VecDoub_I);
};
VecDoub PTSolver::vecfunc(VecDoub_I x) {
int n=x.size();
VecDoub results(n);
for (int i=0;i<n;i++) {
results[i]=2.0*x[i];
}
return results;
}
int main() {
VecDoub initGuess(2);
initGuess[0]=4.4;
initGuess[1]=5.5;
bool check;
//function<VecDoub(PTSolver*, VecDoub_I)> Func=&PTSolver::vecfunc;
typedef VecDoub (PTSolver::*PMemFnc)(VecDoub_I x);
PMemFnc Func;
PTSolver ptsolver;
newt<PMemFnc>(initGuess, check, Func, ptsolver);
return 0;
}
您有一个类型不匹配:
template <class T>
struct NRfmin {
NRfmin(T &funcc) : func(funcc) {}
};
template <class T>
void newt(VecDoub_IO &x, bool &check, T &vecfunc, PTSolver &obj){
NRfmin<T> fmin(obj.*vecfunc);
..
};
在这两种情况下,T
都是指向成员函数的指针,但您正在构造fmin
,而这些东西绝对不是T&
(它甚至不是一个有效的表达式)。要么你的意思是只转发指针,在这种情况下:
NRfmin<T> fmin(vecfunc);
或者你想传递NRfmin
绑定函子。
相关文章:
- 如何在C++中将迭代器作为函数参数传递
- 为什么我不能将引用作为 std::async 的函数参数传递
- 节点插件 API 将数组作为函数参数传递
- 将字符串数组作为函数参数传递
- 如何通过 C++ 中的函数参数传递初始值设定项列表的固定大小的初始值设定项列表?
- 我可以动态创建新地图并作为函数参数传递吗?
- 将任意模板向量作为函数参数C++传递
- 将函数指针作为函数参数传递的目的
- C++:通过函数参数传递的值给出不同的结果
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 通过宏将函数参数传递给函数
- C++:访问作为函数参数传递的双指针数组所指向的变量的值
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 将派生类构造函数参数传递给受保护的成员
- 将指向数组的指针作为函数参数传递,这本身就是另一个函数的返回值?
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 如何将派生类作为函数参数传递:如果派生类成员不在父类中怎么办
- 如何将变量作为构造函数参数或函数参数传递
- 当数组对象以函数参数传递时,为什么复制构造函数会自称