config
,
circuit
및
conn
,이
이
struct config { /* ... */ };
struct circuit {
config *cfg;
/* ... */
};
struct conn {
config *cfg;
circuit *ckt;
/* ... */
}
(가를 액세스 제어 및이 프로그램에 대한 중간 ++ C로 C로 변환되고 통해 있기 때문에 어떤 포인터 정보는. 그것은 지금 중요하지 않습니다.) 이러한 클래스는 서브 클래스된다
, 모두 세 그룹의 서브 클래스 항상 입니다 :
struct foo_config : config { /* ... */ };
struct foo_circuit : circuit { /* ... */ };
struct foo_conn : conn { /* ... */ };
또한, 불변 런타임는 그 인스턴스에 foo_circuit
또는 foo_conn
것 foo_config
인스턴스 항상 포인트 및 foo_conn
에서 ckt
포인터 것 항상 점에서 cfg
포인터 foo_circuit
입니다. 이것은 현재 dynamic_cast
및 단정으로 시행되고 있습니다. 현재 두 개의 다른 foo
이 있지만 앞으로 더 많은 것이있을 수 있습니다.
cfg
및
ckt
포인터는 일반
circuit
및
conn
클래스의 메소드에 접근을 유지하며,이 제네릭 형식을 가지고 있지만, 서브 클래스의 방법에서, 그 포인터가 적절한 서브 클래스 유형을 가질 수 있도록하는 것이 가능 사항을 마련하는 것입니다 , 위의 불변량은 컴파일 타임 적용이됩니까? 그렇다면 어떻게? 그렇지 않다면, 내가 대신 제안하는 바는 무엇입니까?
각 서브 클래스 집합에 대해 작성해야하는 상용구의 양을 최소화하는 대답을 선호합니다. 익명의 네임 스페이스에 하위 클래스가 정의되어 있고 머리글에 표시되지 않는 경우에도 여전히 작동하는 대답을 선호합니다.