还在写C++?用C语言写出struct间继承!


#1

用C语言写出struct间继承

来看这个:

typedef struct _animal
{
    int weight;
    int length;
}animal;

typedef struct _mammal
{
    animal _super;
    uint32_t milk_taste;
}mammal;

看到这里有人估计开始骂人了:这TM才不是继承啊!但是精彩在后面:

mammal s_a;
s_a._super.weight = 30;
s_a._super.length = 50;
s_a.milk_taste = 200;
animal *a = (animal *)&s_a;

是的,强制指针类型转换!由于这时_super在mammal的最前面所以:

printf("Weight : %d; Length : %d; \n", a->weight, a->length);
// Weight : 30; Length : 50; 

是可以被用作Animal *成功读取的!

这样带来的继承的好处还有很多。。 未完待续


#5

油菜, 你怎么能烂用版主的优势给自己的垃圾帖子置顶 !


#6

每当看到用别的语言来模拟C++的特性的时候我就感到很高兴


#7

现在置顶泛滥很严重~~


#8

强制指针类型转换?既然要模拟,干啥不直接用,奇技淫巧!


#9

好问题。

Linus的名言:

……为了把那些写C++的踢出去!

还有2个好处,就是:

  • 它编译快,占内存小。
  • 后面我会写,用这样简单的方式处理继承&绑定需求可以避免出现C++里一个很严重的问题就是过度离散化。简述一下就是:C中可以用一个pool管理一组内存对象的生命周期,但C++的T&和构造器和shared_ptr打破了pool,让代码时间线上到处是atomic,在调试时候很麻烦,还会有大量不必要的stack使用。——这就是pypy怎么性能逼近C++的。

#10

编译快神马的,根本不是我们要的. 我们要的就是累死编译器!


#12

油菜居然用c写出了c++继承!!! 唉!