문제
여러 번, 다차원 데이터 용 컨테이너를 정의해야합니다.
예를 들어 봅시다 : 나는 많은 칩이 있고, 각 칩에는 많은 레지스터가 있고, 각 레지스터에는 많은 셀이 있으며, 각 셀에는 많은 트랜지스터가 있습니다.
C ++ 프로그램의 어떤 단계에서 나는이 데이터를 읽어야하고 나중에 사용해야합니다.
파일, 데이터베이스 등이 데이터에 외부 스토리지를 사용할 수 없습니다.
그렇다면 다차원 STL 컨테이너를 만들어야합니까? 벡터지도 또는 그와 비슷한 것 ...?
아니면 각각에 대한 클래스 (structs)를 만들어야합니까? 트랜지스터의 벡터를 포함하는 셀 클래스, 그리고 셀의 벡터 등을 포함하는 레지스터 클래스? 그러나 나중에 칩이 아닌 트랜지스터로 데이터에 액세스하고 싶다면 어떻게해야합니까?
다른 방법이 있습니까?
고맙습니다
편집 : 언급을 잊었습니다. 부스트를 사용할 수 없습니다.
해결책
그들을 위해 전체 클래스를 구현하십시오. 결국 코드는 더 깨끗합니다.
내가이 공리를 무시할 때마다, 그것은 나를 괴롭히기 위해 돌아온다. std :: std :: strings and std : 쌍의 측면에서 계층 적 3 계층 문자열 컬렉션을 구현했습니다. 그것은 빠르고 간단했고, 한 레이어를 교체하고 다른 레이어를 교체해야 할 때 추가 속성을 포함하기 위해 클래스로 교체해야 할 때 놀랍게도 쉽게 수행 할 수있었습니다. 그러나 결국, 코드는 엉망이었고 나는 그것을 문서화하는 것이 행복하지 않았습니다. 교훈은 또 다시 배웠습니다.
다른 팁
도메인을 매핑해야합니다.
그렇다면 다차원 STL 컨테이너를 만들어야합니까? 벡터지도 또는 그와 비슷한 것 ...?
각 벡터/맵에는 일부 유형의 객체가 포함됩니다. 그것은 우리를 다음 질문으로 데려옵니다 :)
아니면 각각에 대한 클래스 (structs)를 만들어야합니까?
최소한 필요한 것 같습니다.
트랜지스터의 벡터를 포함하는 셀 클래스, 그리고 셀의 벡터 등을 포함하는 레지스터 클래스?
둘 다 봐 has-a
그리고 is-implemented-in-terms-of
디자인.
그러나 나중에 칩이 아닌 트랜지스터별로 데이터를 정렬하고 싶다면 어떻게해야합니까?
어떤 데이터? 컨텍스트에 따라 항상 비교기를 통과 할 수 있습니다. 또한 실제로 노출 해야하는지 스스로에게 물어보십시오. Transistor
a와 함께 일하는 사람에게 레벨 세부 사항 Chip
. 그것은 시작하는 데 도움이 될 것입니다.
다른 "크기"를 따라 데이터에 액세스하려면 관심이있을 수 있습니다. boost::multi_index_container
. 나는 그것을 직접 사용하지 않았지만 법안에 맞는 것처럼 보입니다.
권고 한 바와 같이, 나는 전체 클래스를 구현하기로 결정했습니다.
class Chip
{
map<RegisterLocation, Register> RegistersPerLocation;
public:
void AddRegisterPerLocation(RegisterLocation, Register);
};
class Register
{
map<CellLocation, Cell> CellsPerLocation;
public:
void AddCellPerLocation(CellLocation, Cell);
};
// etc..