알아, 알아. 질문은 단지 "당신은 그 상황에 있어서는 안된다!"고 비명을 지른다. 하지만 내 말 들려 ...const 멤버 변수를 수정할 수 있습니까?
나는 한 스레드에서 업데이트를 수행하고 다른 스레드에서 렌더링을 수행하는 게임 엔진을 가지고있다. 렌더링은 이전 프레임의 데이터를 읽으려는 반면, 업데이트는 다음 프레임의 데이터를 업데이트합니다.
그래서이 문제를 해결하려면 mutable_data 구조체 (속도, 위치 등 ...)를 변경할 수있는 객체의 모든 것이 있습니다. 객체 내부에 두 개의 인스턴스가 있고 const와 다른. 게임 루프의 한 반복이 끝나면 비 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 대신 const로 표시되는 이유는 무엇입니까? – Adam
데이터 구조에 대한 설명 : 업데이트를위한 스왑과 읽은 스왑의 최상위 수준 포인터가있는 별도의 두 데이터 트리를 유지하는 것이 더 좋지 않습니까? 각 객체 안에 두 세트의 데이터를 보관하는 것이 좋습니다. –
@Adam은 const 객체이기 때문에. 나는 그걸 가지고 노는 것을 아무것도 원하지 않는다 ... 갱신 될 필요가있을 때를 제외하고. 나는 const가 아니라고 선언 할 수 있다는 것을 알지만,이 상황에서는 const가되는 것이 더 적절하다고 느낀다. 아니? –