I'm developing a thing in C, and currently I have followed a style where I provide a struct declaration containing data, and separate functions for acting upon said data. Something like this:
MyData.h
struct MyData
{
int a;
float b;
};
void initialise( struct MyData* instance );
int get_a( struct MyData* instance );
float get_b( struct MyData* instance );
MyData.c
#include <MyData.h>
void initialise( struct MyData* instance )
{
instance->a = 2;
instance->b = 7.3f;
}
int get_a( struct MyData* instance )
{
return instance->a;
}
float get_b( struct MyData* instance )
{
return instance->b;
}
main.c
#include <MyData.h>
int main( void )
{
MyData test;
initialise( &test );
int x = get_a( &test );
float y = get_b( &test );
return 0;
}
I'm wondering whether or not to do some pointer trickery to make it look more OO, like the following:
MyData.h
struct MyData
{
int a;
float b;
int (*get_a) (struct MyData*);
float (*get_b) (struct MyData*);
};
void initialise( struct MyData* instance );
MyData.c
#include <MyData.h>
static int get_a( struct MyData* instance )
{
return instance->a;
}
static float get_b( struct MyData* instance )
{
return instance->b;
}
void initialise( struct MyData* instance )
{
instance->get_a = get_a;
instance->get_b = get_b;
instance->a = 2;
instance->b = 7.3f;
}
main.c
#include <MyData.h>
int main( void )
{
MyData test;
initialise( &test );
int x = test.get_a( &test );
float y = test.get_b( &test );
return 0;
}
The benefit I see is being make get_a and get_b static, so they can't be called directly without having instantiated a type from MyData.
What other pro's and con's are there from doing this, and am I doing the initialisation correctly for assigning the function pointers?