gpt4 book ai didi

c++ - 授予类数据成员访问权限的选项 (C++)

转载 作者:搜寻专家 更新时间:2023-10-31 00:48:03 24 4
gpt4 key购买 nike

这是一个基本问题,关于哪些选项可用于定义某些参数的范围。我特别想了解速度、内存、代码清晰度、易于实现和代码安全性方面的权衡。我的编程经验显然不多,而且我几乎没有接受过正规培训。我怀疑一两个选项是显而易见的“正确”答案。

我有一个模拟封装在它自己的名为 Simulation 的类中.仿真中使用的一些参数是在初始化Simulation时从一组文件中读入的,这些参数目前存储在几个二维数组中。这些数组,demPMFsserotypePars , 目前都是 Simulation 的私有(private)成员:

// Simulation.h

class Simulation
{
Simulation( int simID );
~Simulation();

public:
// ...[code snipped]...

private:
double demPMFs[ NUM_SOCIODEM_FILES ][ INIT_NUM_AGE_CATS ];
double serotypePars[ NUM_EPID_FILES ][ INIT_NUM_STYPES ];
// ...[code snipped]...
};

模拟主要涉及修改类 Host 的实例.类的成员函数 Host经常需要访问存储在 serotypePars 中的参数值.以前,我现在拥有所有数据 serotypePars存储为 const在编译时解释的数字,但现在这些参数是从文件中读取的,事情有点复杂(无论如何对我来说)。

对我来说授予类(class)所有成员最快最安全的方法是什么 HostserotypePars 的“只读”访问权限? 最快的值得优先考虑:我的程序中没有其他类,所以 global是一个(粗略的)潜在解决方案;所有模拟都将从相同的参数集运行。我不愿意将数组传递给作用于 Host 的各个函数成员,因为可能有十几个,而且有些是完全嵌套的。 (例如,我有不能将二维数组作为参数的中间包装结构,而且我不确定可能存在哪些语法变通方法。出于速度目的,我想坚持使用数组,而我的非统一 prng生成器都需要数组。)

我将非常感激知道什么需要对现有代码进行最少的修改,同时又不会引入巨大的危险。

感谢您提供的任何见解。


我面临的一个相关挑战是不知道如何从 Host 类访问 Simulation 成员,除非这些成员被传递给 Host 函数。这基本上是发生了什么:

// main.cpp

int main() {
for ( int s = 1; s < NUM_SIMS+1; s++ ) {
Simulation thisSim(s);
thisSim.runDemSim();
thisSim.runEpidSim();
// ... code snipped ...
}
}

函数Simulation::runDemSim()Simulation::runEpidSim()创建、修改和销毁类 Host 的多个实例.指向这些实例的指针存储在 Boost MultiIndex 容器中,这是中间包装函数的用武之地。许多修改之一涉及最终调用 Host::calcRecovery。 ,需要访问 serotypePars :

// Host.cpp

// ... code snipped ...

double Host::calcRecovery( int s, double currentTime, double infectionTime, boost::mt19937& rng ) {
// ...code snipped...
effectiveMean = serotypePars[ MEAN_DURATION_INDEX ][ s ] * currentInfections * pastInfections;
double rt = rgamma( effectiveMean, serotypePars[ VAR_DURATION_INDEX ][ s ], rng );
}

(抱歉,如果 TMI。)只需声明 serotypeParsSimulation 公开类定义导致 Host.cpp 中出现“serotypePars 未在此范围内声明”错误。


解决方案总结

GMan 建议我将所有模拟参数打包在一个私有(private)类中,例如 SimulationPars ,似乎是最优雅和可扩展的路线。 SimulationPars 的实例可以属于每个 Simulation , 和指向 SimulationPars 的指针可以传递给每个 Host 的构造函数在给定的 Simulation 内.感谢大家的深思熟虑的讨论。

最佳答案

这是正常的:

class Simulation
{
public:
// typedef's should be used liberally, it's easier to read
typedef double pmf_type[NUM_SOCIODEM_FILES][INIT_NUM_AGE_CATS];
typedef double sero_type[NUM_EPID_FILES][INIT_NUM_STYPES];

// accessors
const pmf_type& get_pmf(void) const
{
return demPMFs;
}

const sero_type& get_sero(void) const
{
return serotypePars;
}

private:
pmf_type demPMFs;
sero_type serotypePars;
};

关于c++ - 授予类数据成员访问权限的选项 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3096453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com