2013-07-17 2 views
0

현재 코드의 테이블 형식을 추가해야합니다. 아래 코드는 다소 간단한 버전입니다.C++의 테이블 형식에 대한 제안

class A { 
    public: 
    A():x(0) { 
    } int getValue() { 
    return x; 
    } 
    private: 
    int x; 
}; 

class B { 
    public: 
    B():y(0) { 
    } int getValue() { 
    return y; 
    } 
    private: 
    int y; 
}; 

class C { 
    public: 
    C():z(0) { 
    } int getValue() { 
    return z; 
    } 
    private: 
    int z; 
}; 

class D { 
    public: 
    D(A x, B y, C z) { 
    a = x; 
    b = y; 
    c = z; 
    } A getA() { 
    return a; 
    } 
    B getB() { 
    return b; 
    } 
    C getC() { 
    return c; 
    } 
    private: 
    A a; 
    B b; 
    C c; 
}; 

typedef enum { 
    TABLE_A = 0, 
    TABLE_B, 
    TABLE_C, 
    TABLE_D, 
    TABLE_MAX 
} table_index; 

typedef struct tableInfo_tag { 
    table_index id, D d; 
} tableInfo; 

tableInfo gtable[table_index::TABLE_MAX] = { 
    {TABLE_A, {1, 2, 3}}, 
    {TABLE_A, {4, 5, 6}}, 
    {TABLE_A, {7, 8, 9}} 
} 

하지만 어떻게 든 나는 클래스 D의 값을 생성자를 받아 들일 수 없다. 내가 값의 집합의 큰 범위를 줄 수 있고 특정 조건에 따라 집합을 얻을 수있는이 테이블 형식이 필요해 ... 난 C + + 전문가가 아니므로 진행 방법에 대한 모든 입력 또는 다른 아이디어/입력 그건 그것의 크기를 지정해야하는 이유 -

typedef struct tableInfo_tag { 
    table_index id; 
    int d_len; 
    D d[8]; 
} tableInfo; 

tableInfo gtable[TABLE_MAX] = { 
    {TABLE_A, 2, {D(A(),B(),C()),D()}} 
}; 

여기서 d는 배열입니다 ^^^ 있지만 정적으로 할당되어야한다), 재미 다시 쓰기 일부 다했다

+0

여기서 (!)'table_index' 유형은 정의되어 있습니까? 'typedef tableInfo_tag {...} tableInfo;'도 컴파일하지 않습니다. 실제 코드를 보여주십시오. BTW : 당신의 문제는 단순한 구조체를 사용하는 것으로 해결할 수 있다고 생각합니다. 이전의 C++ 표준 하에서조차도 쉽게 {}} 목록에서 초기화 할 수 있기 때문입니다. –

+0

의견을 주셔서 감사합니다. 정정되었습니다. 불행히도 나는 큰 프로젝트 코드의 일부이기 때문에 원래 코드 (이 부분을 작성했지만)를 보여줄 수 없다. 방금 기존 C++ 코드에 테이블 버전을 추가하려고 했으므로 클래스가 선호됩니다. 클래스 D는 이미 정의되어 있습니다. 그래서 참조해야합니다. D 값의 테이블을 추가하는 것이 가장 좋습니다. – pdk

+0

코드를 읽는 것이 매우 어렵다는 것을 추가해야합니다. 변수와 의미있는 이름을 지정하고 컴파일러가 아닌 읽기 전용 코드를 작성해야합니다. – idoby

답변

0
typedef struct tableInfo_tag { 
    table_index id; 
    D d; 
} tableInfo; 

tableInfo gtable[TABLE_MAX] = { 
    {TABLE_A, D(A(),B(),C())} 
}; 

정말 도움이됩니다 ... D의 사용 가능한 크기는 알 수 없지만이 문제를 해결하기 위해 d_len을 추가했습니다 ...

+0

잘 보일 것입니다. 한 가지 더. 이 코드를 구현하려고 할 때 각 테이블에 대해 D 클래스의 벡터가 있다고 깨달았습니다. 벡터 크기는 다를 수 있습니다. typedef struct tableInfo_tag { table_index id; int num_instances; D d; } tableInfo; {TABLE_MAX, {TABLE_A, 1, D (A), B(), C()}}, {TABLE_B, 2, D , D (A(), B(), C())} }; – pdk

+0

이것에 대한 아이디어가 있으십니까? – pdk

+0

기본적으로 D의 인스턴스 수를 테이블에서 변수로 지정하고이를 읽고 벡터를 만듭니다. – pdk