...가변 클래스/구조체 구조? (노조 템플릿 및하지하지?) 나는 노동 조합을 시도
struct foo
{
union
{
struct // 2 bytes
{
char var0_1;
};
struct // 5 bytes
{
char var1_1;
int var1_2;
};
};
};
문제 : 노동 조합 내가 원하는 것을, 그들은 항상 가장 큰 데이터 타입의 크기를 취할 것 제외. 내 경우에는 구조체 foo를 사용하여 아래의 그림처럼 두 구조 중 어느 구조체를 선택해야하는지 알려주는 초기화가 필요합니다. 내가 템플릿과 나는 문자와 INT에 같은 변수 이름을 사용할 수 있다는 사실에 정말 행복했지만 :
그래서 그 후, 나는 ...template <bool B>
class foo { }
template <>
class foo<true>
{
char var1;
}
template <>
class foo<false>
{
char var0;
int var1;
}
문제를 클래스 템플릿 오버로드를 시도 문제는 문법이었다. 클래스는 컴파일시에 만들어지기 때문에 템플릿 불린 변수는 하드 코딩 된 상수 일 필요가 있지만, 내 경우에는 부울을 런타임에 사용자 정의해야합니다.
그래서 두 개의 "세계"가 필요합니다. 내가 뭘 하려는지 어떻게 성취 할 수 있니?
!! 참고 : foo 클래스/구조체는 나중에 상속 될 것이므로 이미 언급했듯이 foo의 크기가 가장 중요합니다.
수정 # 1 : 응용 프로그램 :
기본적으로이 특정 데이터 버퍼 (인터페이스로의 포인터를 사용하여) 읽기/쓰기 또한 (나 만들 클래스의 새 인스턴스를 허용하는 데 사용됩니다/struct) 동일한 데이터 버퍼. 위에 표시된 변수는 길이를 지정합니다. 크기가 작은 데이터 버퍼 인 경우 길이는 char/byte로 기록됩니다. 더 큰 데이터 버퍼 인 경우 첫 번째 char/byte는 플래그로 null이며 int는 길이를 대신 지정합니다. 길이 이후에는 실제 데이터가 뒤 따른다는 것은 명백합니다. 따라서 상속 이유는 무엇입니까? 클래스의 크기가 가장 중요합니다. 내 케이크 먹고 먹어야 해.
달성하려는 목표는 무엇입니까? – NathanOliver
아마도 boost :: any를 살펴볼 수 있을까요? – AndyG
@ NathanOliver 데이터를 읽거나 쓰는 포인터로 사용하고 새로운 데이터를 쓰도록 인스턴스를 초기화합니다. foo는 더 많은 공유 인터페이스가 될 것입니다. –