クラスのデータ メンバーにアクセスする必要がある静的関数があります。関数は、クラスのメンバー、非メンバー、またはフレンド関数にすることができますが、静的でなければならず、引数を取ることはできません。そのため、データ メンバーをパラメーターとして渡すことも、オブジェクト自体を渡すこともできません。
#include "sundials.h"
#include "CVode.h"
class nBody
{
private:
double masses[];
double** paths;
static int accelerator();
//...
public:
//...
void runODE();
};
int nBody::accelerator()
{
// code that needs to know the values stored in masses[]
}
void nBody::runODE()
{
//...
ODEsetAccelerator(accelerator); //require accelerator to be static int
//with specific parameters
// run the ODE
//record trajectories in paths[][]
}
accelerator
アクセラレータがタイプで指定された引数を取る必要がある別の ODE ソルバーに供給されるstatic int
ため、ODE によって呼び出され、そうではないため、質量をアクセラレータに渡すことはできません。main
アクセラレータ関数に質量の値を知らせる方法はありますか? それがどれほど間接的であるかは気にしません。