다른 형식의 항목을 지원하는 배열을 사용하여 스택을 구현하는 방법. 예 : 문자, 정수, 수레 및 복식에서 작동해야합니다.배열을 사용하여 다른 데이터 형식의 항목을 지원하는 스택 구현
void
포인터를 사용하여 구현했습니다. 나를 위해
void push(void** stack, int* top, void* data, size_t size)
{
unsigned i;
++*top;
stack[*top] = malloc(size);
for(i = 0; i < size; ++i)
((char*)stack[*top])[i] = ((char*)data)[i];
}
int main()
{
void* stack[10];
int top = -1, data = 10;
char ch = 'a';
push(stack, &top, (void*)&data, sizeof(int));
push(stack, &top, (void*)&ch, sizeof(char));
printf("%d ", *(int*)stack[0]);
printf("%c ", *(char*)stack[1]);
return 0;
}
코드 works fine : 아래 C
구현입니다.
위 구현의 문제점은 데이터 유형을 사전에 알아야한다는 것입니다.
작동시킬 데이터 유형에 대한 사전 정보를 모른 채 구현할 수있는 방법이 있습니까? [C에서 가능하지 않다는 것을 알고 있습니다. 예, 어떻게 할 수 있습니까? ]?
[RTTI] (http://en.wikipedia.org/wiki/Run-time_type_information) ... C++에서 일반적으로 컨테이너는 형식 매개 변수를 사용하는 템플릿입니다. '[std :: stack'] (http://en.cppreference.com/w/cpp/container/stack)이 있습니다. – oldrinb
예, 컨테이너는 템플릿입니다. 그러나 AFAIK는 한 번에 한 가지 유형 만 지원합니다. –
이것은 C 또는 C++에서 제공됩니까? '해결책은 각 언어마다 다를 것입니다. –