首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有设置参数的静态成员函数需要访问非静态数据成员

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

Stack Overflow用户
提问于 2012-07-04 03:06:16
回答 4查看 311关注 0票数 0

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

代码语言:javascript
复制
#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调用

有没有办法让加速器函数知道质量值?我不管它有多间接。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-04 05:35:24

如果这是在快速网络搜索中显示的"sundials“和"CVode”:

使用相关的nBody*作为user_data参数。

在用户功能文档(第55页)中对其进行了描述。

如果没有,请忽略此答案。

票数 0
EN

Stack Overflow用户

发布于 2012-07-04 03:10:06

让我开始说,,你的设计坏了,。需要访问类的非static成员但不能接收参数的static方法?

抛开这个不谈,你当然可以。您可以从static方法内部访问全局对象,该方法设置为您正在尝试操作的当前对象:

代码语言:javascript
复制
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();
票数 1
EN

Stack Overflow用户

发布于 2012-07-04 03:09:55

考虑到您的限制,一个可怕的解决方案是在类中有一个名为nBody *类型的类似currentNBody的静态变量,并在运行ODE求解器之前将其设置为适当的实例。

您正确地将其标识为全局变量。当然,如果你在做任何多线程的事情,这将会彻底失败。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11317501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档