如何使用支持不同类型项目的数组来实现堆栈。例如,它应该对字符、整数、浮点数和双精度数进行操作。
我已经使用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;
}
该代码对我来说很好。
上述实现的问题是必须事先知道数据的类型。
是否存在一种在不知道要操作的数据类型的先验信息的情况下实现它的方法[我知道这在 C 中是不可能的,我们可以在 C++ 中做到这一点,如果是,如何?]?