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



我从未使用过回调,但以下代码应该根据我的教授笔记工作。它不喜欢模板,并且有关于"高斯不能出现在常量表达式中"的错误。注意:GaussElim是一个函数对象(gauss(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);
}

高斯运算符() 重载签名:

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);

我必须做什么才能让它工作?

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

solve的第二个模板参数需要函数,而不是函子。特别是具有给定模板参数T的签名Vector<T> ()(const AbstractMatrix<T>&, const Vector<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);

相关内容

  • 没有找到相关文章

最新更新