Re: struct and function-pointer casting
- From: Eric Sosman <eric.sosman@xxxxxxx>
- Date: Fri, 29 Apr 2005 14:24:58 -0400
Maurice wrote:
> Hi,
>
> Is it legal to cast from void(*)(A*) to void(*)(B*)?
> Is it legal to cast from struct Derived{Base b; ...} to struct Base?
>
> I'm trying to get some inheritance and polymorphism in C
> and I end up with the following code:
>
> struct Base {
> void(*func)(struct Base*);
> };
>
> struct Derived {
> struct Base base;
> /* ... */
> };
>
> void derived_func(struct Derived* d) {}
>
> int main() {
> struct Derived d = {{derived_func} /*...*/ };
>
> struct Base* b = &d;
> b->func(b);
> }
No; the type of `derived_func' does not match the
type of the `func' element in `struct Base', so the
compiler should object to the initialization. One
simple fix is
void derived_func(struct Base *b) {
struct Derived *d = (struct Derived*)b;
...
}
The conversions of the struct pointers are all right:
any struct pointer can be converted to and from a pointer
to the struct's first element (unless that element is a
bit-field; you can't point to a bit-field).
--
Eric.Sosman@xxxxxxx
.
- Follow-Ups:
- Re: struct and function-pointer casting
- From: Maurice
- Re: struct and function-pointer casting
- References:
- struct and function-pointer casting
- From: Maurice
- struct and function-pointer casting
- Prev by Date: Re: Value of EOF
- Next by Date: Re: How is strlen implemented?
- Previous by thread: struct and function-pointer casting
- Next by thread: Re: struct and function-pointer casting
- Index(es):