【发布时间】:2011-12-08 18:06:56
【问题描述】:
我有一个 C++ 代码,我真的需要在其中使用 C 函数:
int procedure(... , S_fp fun , ...)
其中 fun - 是指向函数的指针,其签名必须是这样的:
int fun(double* , double* , double)
函数,我要使用的指针,是类模板的成员:
template<int nPar> class PenaltyAlgorithm
{
public:
...
int Calculate(double* param, double* val, double prec)
{
...
}
...
}
如您所见,它的签名是有序的。但是当我这样做时: 过程(... &PenaltyAlgorithm::Calculate, ...);
我得到错误:
error: cannot convert ‘int (PenaltyAlgorithm<30>::*)(double*, double*, double)’ to ‘int (*)(...)’ for argument ...
请帮忙。如果您需要任何其他信息,请写信。
谢谢!!!
阅读答案后,我明白添加有关课程的信息很重要:
template<int nPar> class PenaltyAlgorithm
{
public:
int Calculate(double* param, double* val, double prec)
{
*val = comp_fun->Compute(param);
}
double* RunAlgorithm()
{
...
procedure(... &PenaltyAlgorithm<nPar>::Calculate, ...);
...
}
...
private:
...
CompositeFunction<nPar>* comp_fun;
}
1)。我不能使用静态乐趣,因为这种乐趣需要获得类成员的访问权限;
2)。我们可以使用我们从类有趣成员中调用“程序”这一事实吗?
【问题讨论】:
-
在类上调用函数会传递一个隐式 this 指针,因此您的签名显然是错误的。你应该阅读the C++ FAQ
标签: c++ c templates function pointers