프로그램 실행 시간의 시작 부분에 읽어 들여서 구문 분석하고 구조체에 넣는 구성 파일이 있습니다.const 구조체에 대한 const 정확도
내가 겪고있는 문제는이 값들이 프로그램 수명 동안 변경되어서는 안되기 때문에 이러한 구조를 일정하게 유지해야한다는 것입니다.
현재 나는 다음과 같은 일을 오전 :config.h 파일이 잘 작동
/*-- so we don't fall out of scope --*/
SerialNode* global_sn;
SerialNode local_sn = {port, format};
global_sn = new SerialNode(local_sn);
SerialConfig[key_store] = global_sn;
#pragma warning(push)
#pragma warning(disable: 4510) /*-- we don't want a default constructor --*/
#pragma warning(disable: 4610) /*-- we don't want this to ever be user instantiated --*/
typedef struct SerialNode {
private:
void operator=(SerialNode&);
public:
const char* const port;
const char* const format;
} SerialNode;
#pragma warning(pop)
typedef std::map<const char*, const SerialNode*, MapStrComp> SerialMap;
SerialMap SerialConfig;
config.cpp합니다. 그러나 내 문제는 지금 구조 목록을 구조 밖으로 가져 와서 수정하고 다시 넣어야하는보다 복잡한 구성 데이터를 다루고 있다는 것입니다. 이 솔루션은 뭔가 같은 것 때문에
은 물론 나는 그것을 수정할 수 없습니다 :
SerialNode* global_sn;
SerialNode* old_sn = SerialConfig[key_store];
SerialNode local_sn = {port, format, old_sn->old_data, old_sn->more_old_data};
global_sn = new SerialNode(local_sn);
SerialConfig[key_store] = global_sn;
delete old_sn;
그러나 이것은 나에게 나쁜 프로그래밍 연습을 친다. 그러한 해킹 된 솔루션을 필요로하지 않는 목적을 달성하기위한 더 좋은 방법이 있습니까? 참고로
, 나는 2010
'const'를 제거 하시겠습니까? 뭔가를 만들고 const를 만들고 그 일을 해결하는 것처럼 보인다. 그러나, 제안 된 솔루션은 실제로'SerialConfig'를 수정하는 것을 제외하고는 다소 기능적인 스타일의 프로그래밍입니다. 그렇게 나쁘지는 않습니다. y r u '를 사용하여 btw? – Kal
그 pragmas, 나는 그들이 당신이 생각하는 것을 의미하지 않는다고 생각합니다. 그들은 단지 다른 방법으로 돌봐야 할 경고를 단순히 억제합니다. – Thomas
@Kal 그게 핵심입니다. 그것은'const'이어야하며 나는 그 것처럼 주위를 돌아 다니면 안된다. 하지만 일단 설정해야하기 때문에 설정 코드가'const'를 해결하도록 받아 들일 수 있다고 생각합니다. 다른 코드는 이것을 수정할 수 있어야합니다. – Serdalis