C ++回调函数到成员函数

时间:2015-05-02 06:23:12

标签: c++ function callback member-function-pointers member-functions

我从未使用回调,但以下代码根据我教授的笔记工作。它不喜欢模板并且有关于&#34的错误;高斯不能出现在常量表达式中。" 注意:GaussElim是一个函数对象(高斯(mx,vector)在以前的代码中有效)。

DirichletSolver模板化回调函数:

template <class T, Vector<T> matrixAlgo(const AbstractMatrix<T>&, const Vector<T>)>
Vector<T> DirichletSolver::solve(const AbstractMatrix<T>& mx, const Vector<T> vect)
{
  return matrixAlgo(mx, vect);
}

Gauss operator()重载签名:

template <class T>
Vector<T> operator()(const AbstractMatrix<T>& mx, const Vector<T> vect);

驱动程序代码:

GaussElim gauss;
DirichletSolver dir;
SymMatrix<double> mx;
Vector<double> vect;
...
dir.solve<gauss.operator()>(mx, vect);

我需要做些什么才能让它发挥作用?

它对我的算子有用吗? (我还有两个要实施)

1 个答案:

答案 0 :(得分:1)

solve的第二个模板参数是期望一个函数,不是一个函子。特别是对于给定模板参数Vector<T> ()(const AbstractMatrix<T>&, const Vector<T>)具有签名T的函数。

gauss.operator()没有意义,也许你的意思是GaussElim::operator()但是因为它是一个成员函数而无法工作。如果您可以将GaussElim::operator()的实现作为自由函数编写,则可以将其用作模板参数:

template <class T>
Vector<T> myFunc(const AbstractMatrix<T>& mx, const Vector<T> vect)
{
    // contents of GaussElim::operator()
}

然后用

调用它
dir.solve<double, myFunc>(mx, vect);