c++ - 具有设置参数的静态成员函数需要访问非静态数据成员

标签 c++ class static-functions

我有一个静态函数需要访问类的数据成员。该函数可以是类的成员函数、非成员函数或友元函数,但它必须是静态的并且不能带任何参数。所以我不能将数据成员作为参数传递给它,也不能将对象本身传递给它。

#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 求解器,它要求 accelerator 的类型为 static int 并采用指定的参数,所以我不能将质量传递给 accelerator 因为它将由 ODE 而不是 main

调用

有什么方法可以让加速器函数知道质量的值是多少?我不在乎它有多间接。

最佳答案

首先让我说您的设计有问题。需要访问类的非static 成员且不能接收参数的static 方法?

除此之外,当然可以。您可以从 static 方法内部访问全局对象,该对象设置为您尝试操作的当前对象:

extern nBody* currentBody;

//........
int nBody::accelerator()
{
    //access currentBody
    //since this is a member, you have access to other private members
}

//....
nBody someBody;
currentBody = &someBody;
nBody::accelerator();

关于c++ - 具有设置参数的静态成员函数需要访问非静态数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11317501/

相关文章:

c++ - 汇编代码和cpp代码之间的一对一关联在哪里?

c++ - '非标准语法;使用 '&'创建一个指向具有线程的成员的指针

javascript - 通过名称(字符串)执行类内的私有(private)函数

带有静态局部变量的 C99 静态内联函数

C++如何修改类中另一个类的映射

c++ - 时间转换的建议代码

c++ - 是否有仅从零增加到一的按位技巧?

VB.NET设置类属性初始值

C++ 文件作用域静态函数

c++ - 静态成员函数和访问运算符