如何使用支持不同类型项目的数组实现堆栈。 例如它应该在字符,整数,浮动和双打上运行。使用数组实现堆栈以支持不同数据类型的项目
我已经使用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++吗?因为每种语言的解决方案都不相同。 –