2011-01-13 5 views
1

The Right Way (R)은 내 프로그램의 내부 구성을 저장하려고 생각했습니다.동적으로 내부 구성을 저장합니다.

여기에 세부 사항을이다 :

  • 구성은 런타임 만, 각각의 실행을 생성합니다.
  • "프로젝트"파일의 지시문을 통해 적용 할 수 있습니다 (해당 파일의 읽기가이 질문의 범위에 포함되지 않음).
  • 확장 가능해야합니다. 즉, 새로운 "변수"에 값을 할당하십시오. 이것에 대해

내 질문 :

  1. 어떻게이로 시작해야합니까? 접근 자 및 설정자를 가진 클래스 맞춤 변수에 대한 std::map 내부 변수가 좋은 옵션입니까?
  2. 알려진 "좋은"방법이 있습니까? ?
  3. 정수, 부울 및 문자열 구성 변수 사이에 차이가 있습니까?
  4. 사용자와 내장 사이에 차이가 있습니까? (내가 이미 으로 생각한 것처럼) 변수가 기본 제공됩니까?

고마워요!

추신 : 질문이 명확하지 않은 경우 언제든지 자세한 정보를 요청하십시오.

업데이트 : 모든 답변에는 암시 적으로 또는 명시 적으로 부스트가 사용 된 것으로 보입니다. 필자는 필자가 부스트를 피하기를 원했음에 틀림 없다. (표준 라이브러리의 능력을 지금처럼 탐구하고 싶다.)

답변

1

당신은 속성지도의 일종보다 더 할 수있는 당신은 이것에 대한 Boost.PropertyTree을 사용할 수

class PropertyMap 
{ 
private: 
    StringMap m_Map; 

public: 
    PropertyMap() { }; 
      ~PropertyMap() { }; 

    // properties 
    template<class T> 
    T get(const String& _key, const T& _default = T()) const 
    { 
     StringMap_cit cit(m_Map.find(_key)); 
     return (cit != m_Map.end()) ? boost::lexical_cast<T>(cit->second) : _default; 
    }; // eo get 

    // methods 
    void set(const String& _cap, const String& _value) 
    { 
     m_Map[_cap] = _value; 
    }; // eo set 

    template<class T> 
    void set(const String& _key, const T& _val) 
    { 
     set(_key, boost::lexical_cast<String>(_val)); 
    }; // eo set 
}; 
3

(StringMap 그냥 typedef되어의 표준 : :지도입니다).

속성 나무 다목적 데이터 구조이지만, 구성 데이터를 유지 특히 적합하다. 트리는 고유 한 트리 관련 인터페이스를 제공하며 각 노드 은 자식 노드의 STL 호환 시퀀스이기도합니다.

0

구성 파일에서 중첩을 지원하는 것이 매우 유용합니다. 뭔가가 JSON입니다.

파라미터 값이 스칼라, 어레이 및 변수 중첩 그룹

수있는 바와 같이, 그것은 그 값이 스칼라 어레이 또는 다른 재귀 std::map 될 수 std::map boost::variant의 년대에 저장 될 수있다. std::map은 이름순으로 정렬되므로 매개 변수의 원래 구성 파일 순서가 중요하면 매개 변수의 순차 색인도 있어야합니다. 이는 빠른 조회를 위해 순서화 된 또는 해시 된 인덱스와 함께 원래의 구성 파일 순서로 매개 변수를 순회하기위한 순차 색인과 boost::multi_index을 사용하여 수행 할 수 있습니다.

나는 체크하지 않았다. 그 부스트 속성 맵은 내가 들었던 것으로부터 그것을 할 수있다.

모든 값을 문자열 (또는 배열 값의 문자열 배열)로 저장하여 액세스 할 때만 대상 유형으로 변환 할 수 있습니다.

관련 문제