나는 개인 데이터 멤버의 많은 CObject의 이름을거야 클래스가 ..초기화 중 클래스
class CObject
{
private:
int a, b, c, d, e, f, g, h, i;
string j;
...More data types etc
};
그리고 반복적으로 개체 ..이 회원을 찾는 초기화시 파일을 구문 분석 다른 클래스 클래스는 라이브러리에서 제공하는 가상 클래스를 만족합니다.
class CParser
{
public:
void beginParsingObject()
{
//etc
}
void parseObjectMembers(string name, int a)
{
//Found a member variable of the object!
}
void finishParsingObject()
{
//Finish up parsing the object
}
};
그래서 "parseObjectMembers"는 CObject 클래스에 멤버 변수가 여러 번 호출됩니다.
CObject 클래스는 파서가 데이터 파일 항목에서 다음 멤버 변수를 찾으면 멤버 변수를 채 웁니다. 여기
내 당황입니다 :어떤 데이터를 읽을 때 CObject에서 멤버 변수를 설정하는 좋은 방법이 될 것입니다?
- 생성자를 사용하면 모든 값을 캐싱하고 객체 파싱 완료시 객체를 생성하는 것을 의미합니다. 많은 부분이 만족스럽지 않고 파서가 꽤 일반화되기를 바랍니다.
- CObject 클래스에서 getters와 setters를 사용하면 모든 멤버 변수가 필요하지 않거나 필요없는 모든 것에 노출됩니다.
초기화 기능을 사용하면 문제가 없지만 그 기능에 대한 액세스 권한이 필요하지 않습니다. 친구 기능일까요?
어떤 아이디어라도 감사 드리며 내가 할 수있는 부분을 명확히하겠습니다. 죄송합니다. 코드가 애매하고 매우 매끄럽지는 않지만, 문제의 핵심을보기에 충분합니다.
고마워요.
예, 개념에 이름을 붙여 주셔서 감사합니다. 이것은 참으로 직렬화입니다. 그것은 올바른 방향으로 나를 돕는 도움이 될 것입니다. – SomeGuy
예 (오른쪽)는 중요합니다. 또한 게시물의 제목에 "직렬화"를 추가하십시오. 또 다른 예는이 게시물이 C++ 일지라도 언급 한 C#입니다. 나는 기본적으로 getter와 setter 및 매개 변수없는 생성자를 사용하여 public "Properties"(메서드 호출을 통해 액세스하는 필드)가 필요한 XMLSerializer의 메커니즘을 사용했습니다. [Serializable에 관한 질문] (http://stackoverflow.com/questions/2982376/why-is-serializable-attribute-required-for-an-object-to-be-serialized)에서 정보를 찾으십시오. – NGI
XML 파일을 언급했지만 바이너리 포맷터/백업 파일도 있습니다. 그러나 나는 (내가 아는 바에 따르면) 대부분의 경우 한 인스턴스의 데이터가 연속적이며 파일 전체에 퍼지지 않을 것이라고 가정합니다. 각 데이터 멤버가이 멤버가 속한 인스턴스를 다시 지정해야합니다. – NGI