[common c] 嵌套结构体中内层结构体的成员可以和外层结构体成员同名

前言:

glib 和 gstreamer 体系依赖结构体来实现,其中涉及到虚函数,我们可以发现其中某些结构体成员的名字和其父结构体的成员是同名的,而这是允许的。

代码:

#include 

typedef void (*func1)(int);
typedef void (*func2)(char);

struct A{
        func1 pf;    //叫pf 的成员
};

struct B{
        struct A parent;
        func2 pf;    //同样有一个叫pf的成员,其实这里即便是同样的类型依旧没问题
        //func1 pf;  //不仅仅是同名称, 即便同类型同名称都可以
};


void func1Impl(int i){
        printf("func1Impl");
}
void func2Impl(char c){
        printf("func2Impl");
}

int main()
{
        struct B* pb = new B();
        pb->parent.pf = &func1Impl;
        pb->pf = &func2Impl;
        pb->pf(1);
        pb->parent.pf('c');
}

你可能感兴趣的:(#,Common/Linux,C/C++,c语言,c++)