如何使用支持不同類型項目的數組實現堆棧。 例如它應該在字符,整數,浮動和雙打上運行。使用數組實現堆棧以支持不同數據類型的項目
我已經使用void
指針實現了它。下面是C
實現:
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++嗎?因爲每種語言的解決方案都不相同。 –