Miglioramento del design - C

0

Di seguito è riportato il disegno, che è implementato in modo simile al design utilizzato in Linux/net/socket.c .

Il design sottostante fornisce List astrazione,

dove,list.hforniscel'interfacciaList,mostra qui

Background:

Reason to implement List abstraction in this approach is to consider as a prototype inspired from Linux/net/socket.c design, where any one of the multiple protocol family implementations(like net/ipv4/af_inet.c or net/unix/af_unix.c/..) is available on invoking socket(AF_INET | AF_UNIX | AF_XYZ,,) api.

This prototype would help understand implementing snmp library that talks to multiple network elements(Router/Switch/Server) using snmp protocol.

Il design sopra (mostrato nell'immagine sopra) è un'analogia con Linux/net/socket.c come mostrato in questo codice qui con una leggera differenza nel tempo di collegamento (fase linker) a differenza delle implementazioni di collegamento in Linux/net/socket.c avviene in fase di caricamento sostituendo _init() codice di esecuzione in esecuzione (ad esempio af_inet.c ) e invoca sock_register()

Per migliorare ulteriormente questa analogia,

Sto pensando di migliorare il design (mostrato nell'immagine sopra), che può consentire a createList(ARRAY_IMPL) di essere chiamato da fileIO/fileReading.c (per il proprio scopo) e createList(LINKED_LIST_IMPL) ottenere chiamato da ST/implUsingList.c (per il proprio scopo).

Con il design attuale (mostrato nell'immagine sopra), si rompe lo scopo, in quanto funziona con qualsiasi implementazione (ad esempio arrayImpl.c ) collegata alla fase del linker.

Motivo: ListHandler *handler = NULL; è la variabile globale definita in virtualImplLayer.c e viene sovrascritta su ogni chiamata a createList(ImplType) , come mostrato in questo codice here

La mia domanda:

Come migliorare questo design prototipo per scegliere più implementazioni per lo scenario del cliente (mostrato nell'immagine)? Richiede il multi-threading al livello di implementazione virtuale ??

    
posta overexchange 09.01.2017 - 04:33
fonte

1 risposta

2

Stai provando ad implementare una tabella virtuale. Guarda come è fatto in link

L'idea di base è di memorizzare tutti i metodi necessari per interagire con una struttura come i suoi campi.

Ci sono altri esempi. Google C vtable.

    
risposta data 09.01.2017 - 06:19
fonte

Leggi altre domande sui tag