Pogčedajte punu verziju : Oracle Forms Definicije Tipova
forrest13yu
20. 11. 2008., 18:53
Moze li neko da mi objsni ovo(detaljno):
typedef struct d2fctx d2fctx;
typedef dvoid *(* d2fmalc) (d2fctx *context, size_t size);
typedef dvoid *(* d2fmrlc) (d2fctx *context, dvoid *ptr, size_t newsize);
typedef void (* d2fmfre) (d2fctx *context, dvoid *ptr);
struct d2fctx
{
dvoid *pidgc_d2fctx; /* Builder context */
dvoid *cdata_d2fctx; /* Client Data */
d2fmalc d2fmalc_d2fctx; /* Client provided malloc */
d2fmfre d2fmfre_d2fctx; /* Client provided free */
d2fmrlc d2fmrlc_d2fctx; /* Client provieded realloc */
};
kod je uzet iz d2fpriv.h
a dvoid je void *dvoid tip.
cvele
21. 11. 2008., 09:48
Ne znam kakve ovo veze ima sa sql-om, oracle ili bilo cime sa te strane univerzuma... meni ovo lici na c. Si siguran da znas sta hoces da pitas ?
filmil
21. 11. 2008., 10:42
typedef struct d2fctx d2fctx;
Дефинише нови тип, који се зове d2fctx, а који је представљен структуром која има истоимену ознаку (tag) struct d2fctx.
typedef dvoid *(* d2fmalc) (d2fctx *context, size_t size);
Дефинише нови тип који се зове d2fmalc, а који представља:
- поинтер на функцију
- која као параметре узима:
-- поинтер по имену context на претходно дефинисан тип d2fctx,
-- ознаку за величину типа size_t.
- и враћа поинтер на тип dvoid.
typedef dvoid *(* d2fmrlc) (d2fctx *context, dvoid *ptr, size_t newsize);
Дефинише нови тип који се зове d2fmrlc, а који представља:
- поинтер на функцију
- која као параметре узима:
-- поинтер по имену context на претходно дефинисан тип d2fctx,
-- поинтер по имену ptr на тип dvoid.
-- ознаку по имену newsize за величину типа size_t.
- и враћа поинтер на тип dvoid.
typedef void (* d2fmfre) (d2fctx *context, dvoid *ptr);
Дефинише нови тип који се зове d2fmfre, а који представља:
- поинтер на функцију
- која као параметре узима:
-- поинтер по имену context на претходно дефинисан тип d2fctx,
-- поинтер по имену ptr на тип dvoid.
- и враћа поинтер на тип dvoid.
struct d2fctx
{
dvoid *pidgc_d2fctx; /* Builder context */
dvoid *cdata_d2fctx; /* Client Data */
d2fmalc d2fmalc_d2fctx; /* Client provided malloc */
d2fmfre d2fmfre_d2fctx; /* Client provided free */
d2fmrlc d2fmrlc_d2fctx; /* Client provieded realloc */
};
Ово је структура у којој се налазе два поинтера на тип dvoid на некакве „контексте“, и три поинтера на функције, типова дефинисаних у декларацијама изнад.
Ово је несрећни цеовски начин за нешто што се у објектно-оријентисаним језицима зове убризгавање зависности („dependency injection“) и представља начин да се бибилиотеци проследе корисничке функције.
У објектно оријентисаним језицима би се овај исти проблем решио наслеђивањем или убризгавањем зависности. У јави на пример, горепоменута структура постала би интерфејс (interface), а кориснички код би имплементирао (implement) тај интерфејс и преиначио (overload) функције по жељи.
Познатији пример употребе сличног механизма у Ц-у су униксове операције са датотекама — сваки систем датотека (filesystem) попуњава структуру са поинтерима на функције које изводе стандардне операције над датотекама. Пример како то изгледа у линуксовом кернелу. (http://www.linux-m32r.org/lxr/http/source/include/linux/fs.h#L1113)
ф
vBulletin® v3.6.8, Copyright ©2000-2024, Jelsoft Enterprises Ltd.