我知道,我知道。这个问题只是尖叫“你不应该在这种情况下!”但听我说...我可以修改一个const成员变量吗?
我有一个游戏引擎,执行更新在一个线程和渲染在另一个。渲染器想要从前一帧读取数据,而更新会像下一帧一样更新数据。因此,为了解决这个问题,我有一个POD结构体mutable_data,它是对象中可以改变的所有东西(速度,位置等等),我在对象中有两个实例,一个是const,而另一个是const其他不是。在游戏循环的一次迭代结束时,非常量数据将成为最新的数据对象,然后我想将它复制到常量实例上,以使它们现在相等并准备好进行下一次迭代。
这可能吗?
我已经起草了一个例子程序,希望清楚我的意思:
#include <iostream>
struct mutable_data
{
int i = 1;
bool j = true;
char k = 'a';
};
struct my_data
{
my_data() : constData() {}
int i() const { return constData.i; }
bool j() const { return constData.j; }
char k() const { return constData.k; }
void set_i(int i) { data.i = i; }
void set_j(bool j) { data.j = j; }
void set_k(char k) { data.k = k; }
void update() { constData = data; }
private:
mutable_data const constData;
mutable_data data;
};
int main()
{
my_data d;
std::cout << "i: " << d.i() << ", j: " << d.j() << ", k: " << d.k() << std::endl;
d.set_i(10);
d.set_j(false);
d.set_k('z');
std::cout << "i: " << d.i() << ", j: " << d.j() << ", k: " << d.k() << std::endl;
std::cout << "===============" << std::endl;
d.update();
std::cout << "i: " << d.i() << ", j: " << d.j() << ", k: " << d.k() << std::endl;
}
为什么const表示常量,如果它不是保持不变? – Adam
对你的数据结构的评论:保持两个独立的数据树与最高级别的指针交换哪个是更新和哪些是用于读取是否更好?而不是在每个对象内部保存两组数据。 –
@Adam因为它是一个const对象。我不想要任何东西玩它,除非它需要更新。我知道我可以只声明它不是const,但在这种情况下,感觉它更适合于const。没有? –