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

C++ Callback Function to Member Function

我从未使用过回调,但根据我教授的笔记,下面的代码应该可以工作。它不喜欢模板并且有关于 "gauss cannot appear in a constant-expression." 的错误 注意: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);
}

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

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

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

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