Making structure variable private in C.
// header.h #ifndef _HEADER_H #define _HEADER_H struct sPrivate; // Main structure struct myStruct{ // Private data struct sPrivate *psPrivate; // Function pointers void (*setData) (struct myStruct*, int); int (*retData) (struct myStruct*); }; #endif // _HEADER_H //header.c #include "header.h"// Callback function - Setter / Getter void set_data(struct myStruct* pMyStruct, int a); int ret_data(struct myStruct* pMyStruct); // structure containing private data struct sPrivate { int data; }; // Constructor function struct myStruct *initStruct(){ struct myStruct *pThis = (struct myStruct *)malloc(sizeof(struct myStruct)); pThis->psPrivate= (struct sPrivate *)malloc(sizeof(struct sPrivate)); pThis->psPrivate->data = 0; pThis->setData = set_data; pThis->retData = ret_data; return pThis; } void set_Data(struct myStruct* pMyStruct, int a){ pMyStruct->psPrivate->data = a; } int ret_data(struct myStruct* pMyStruct){ return pMyStruct->psPrivate->data; } //main.c #include <stdio.h> #include "header.h" int main(){ struct myStruct *pObj = initStruct(); pObj->setData(pObj, 10); printf("%d\n", pObj->retData(pObj)); // pObj->pPrivate->a = 30; /* Invalid */ return 0; }
No comments:
Post a Comment