我有一个用C ++编写的大型模拟。模拟的主要工作单元是代表神经元的类。要进行计算,神经元类的每个实例都需要访问温度。每个模拟使用数万个神经元类的实例,并且每个神经元的温度是相同的值。出于这个原因,我宁愿不将它存储为常规成员数据,因此神经元类的每个实例都不必占用存储其自身副本的内存。理想情况下,我将它存储为静态成员变量(或者,作为最后的手段,全局变量)。但是,我需要在运行时确定温度作为用户输入。有没有简单的方法让neruon类以静态成员数据的方式访问这个变量?
答案 0 :(得分:1)
只需提供一个static
成员函数,您可以在运行时调用它并设置温度成员
或者,您可以只创建static
成员public
并直接设置它。作为个人选择,我更喜欢通过成员函数来完成。
class Neuron
{
public:
static void setTemperature(int i)
{
mTemp = i;
}
private:
static int mTemp;
};
int Neuron::mTemp = 0;
int main()
{
//Get Temperature at run-time
Neuron::setTemperature(10);
return 0;
}
答案 1 :(得分:1)
仅仅因为变量是静态的,并不意味着它也需要是const。请参阅以下代码。
#include <cassert>
struct X {
int member;
static int static_var;
};
int X::static_var;
int main() {
X x;
x.member = 1;
x.static_var = 2;
X y;
y.member = 3;
y.static_var = 4;
X::static_var = 5;
assert(x.static_var == y.static_var);
assert(&x.static_var == &y.static_var);
}
答案 2 :(得分:0)
我认为这是一个全球性的好候选人。如果您在模拟中添加了一些也使用温度的内容会怎样?
由于任何人都可以随时修改全局变量,我认为IMO的最佳解决方案是拥有像getTemperature()
这样的全局范围(标准)函数。然后任何对象都可以随时调用它。将它放在自己的C文件中并将其标记为静态只能通过您选择的机制访问它。
另外,如果一个人不喜欢这样,那就是创建一个静态的Globals
或SimulationInputs
类,用温度来吸取东西。
答案 3 :(得分:0)
单身,全球,静态数据,哦,我的!
C ++的数据模型允许我们通过各种机制和黑客对数据进行全局访问,并限制该数据的实例数。
仅仅因为我们可以说并不意味着我们应该这样做。只是因为你有一个可以解决问题的设计,并不意味着你应该选择它。
通常,您拥有管理自己数据的类。如果某个对象需要一些它不管理的数据,则将其作为参数传递。
因此,将温度作为参数传递。明确比隐含更好。
您提到您有一个代表Neurons
的班级。我假设你的意思是Neuron
,但是拥有一个Neurons
类来保持它们在一起也是一件好事。它可以具有适用于所有Neuron
计算的温度。