void* C实现多态的载体

考虑这样的问题,有一台由多种功能板块组成的机器,并且这些板块是可以自由的插拔的,而且每种板块管理的参数也是不同的。我们用C++这类面向对象的语言可以很容易的实现这样的功能,因为面向对象的语言支持多态。于是有了这样的问题:

C语言如何实现多态?

面对上面的实际问题,C++是这样实现的:

class Board{
public:
	Board();
	virtual ~Board();
	virtual Board* getBoard() = 0;
	virtual void  setBoard(Board* board)=0;
private:
	int boardtype;
	Board* board;
}

class Board1 : public Board{
...
}
就是以这种虚函数的方式实现板卡的动态管理。

C语言本身无法实现虚函数这样的功能,但是我们还是想实现类似多态的功能怎么办?

空指针(void *)就是我们唯一可利用的工具,因为空指针可以指向任何数据类型也可以强制转化为任何类型,包括malloc这样的函数返回的也是空指针,所以利用空指针我们这样解决以上的实际问题:

struct Slot
{
	int boardtype;
	void  *board;
};

struct Board1
{
	int prarm1;
	.
	.
	.
	int prarmn;
}

struct Board2
{
	int prarm1;
	.
	.
	.
	int prarmn;
}
...

//卡槽插入板卡
struct Board2 *board = (struct Board2*)malloc(sizeof(struct Board2));
struct Slot slot;
slot.boardtype = 2;
slot.board = (void *)board;

反正这样就实现了一种C语言的多态。

猜你喜欢

转载自blog.csdn.net/BLUCEJIE/article/details/106090821
今日推荐