这是强制执行运行时类型检查的好方法吗?

时间:2017-10-24 20:26:41

标签: c

我正在用c开发一个GUI,所以我有很多小部件,基本上是结构,第一个成员是指向基类的指针:

typedef struct mkGuiButton {
    struct mkGuiWidget *base;
    int some_propperty;
    [...]
}mkGuiButton;

我这样做是因为我喜欢此方法提供的编译时的类型安全性,因此像mk_gui_button_set_label(mkGuiButton *, const char *label)这样的函数可以将mkGuiButton *类型作为参数而不是mkGuiText *。< / p>

当函数在所有小部件中常见的一些标志和属性中运行时,这个实现的缺点就出现了,这就是基本结构。

我不想为每个窗口小部件类型创建特定的函数,所以我使这些函数采用void *这样的mk_gui_set_visible(void *widget, bool state)指针,然后在这个函数中我将指针转换为{{1很明显我失去了类型安全性。

我可以在编译时没有类型安全,但不能在运行时生存,所以我得到了这个解决方案:基本结构,这是mkGuiWidget *,有一个特殊的成员mkGuiWidget(int是32创建时设置为知道值(如2155553647),然后在每个“通用”函数内部进行检查:

int signature

所以问题是:这是一种可靠的方法来进行运行时类型安全检查,还是更好的方法呢?

0 个答案:

没有答案
相关问题