Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    pimpl: più implementazioni della stessa interfaccia

    Salve

    ho il seguente problema di programmazione in C++ (ma penso che l'idioma si possa applicare anche ad altri linguaggi):
    ho differenti oggetti (che si può ritenere appartenenti ad una medesima classe base) che presentano ciascuno delle proprietà che possono essere comuni o specifiche
    e vorrei definire un frontend comune per accedere a questi oggetti, mentre nel backend vorrei definire l'implementazione di ogni specifico oggetto.

    All'inizio avevo pensato subito all'ereditarietà per risolvere questo problema,
    ovvero definendo una classe virtuale pura in cui fossero presenti i metodi (pseudo codice):

    codice:
    PropertyList GetProperties();
    Property GetProperty(Name);
    void SetProperty(Name, Val);
    mentre in ciascuna classe derivata passerei ad implementare
    i metodi in modo specifico per l'oggetto che m'interessa.

    A questo proposito però mi è stato fatto notare che esisterebbe anche una seconda soluzione al problema,
    ovvero adottare l'idioma pimpl, che mi permetterebbe di svincolarmi anche dall'ereditarietà.

    Ho fatto qualche ricerca in internet (pimpl), ma fatico a capire
    come possa implementare in differenti modi l'interfaccia che definisco; gli esempi mostrano tutti come separare l'implementazione, ma non capisco come possa sfruttare questa cosa per poterla fare per differenti "classi derivate", visto che nella classe interfaccia il puntatore pimpl fa riferimento solo ad una sola implementazione
    dell'interfaccia.
    --
    "It is DIFFICULT to get a man to understand something when his SALARY depends upon his NOT UNDERSTANDING IT." Upton Sinclaire
    --
    HP compaq nx6125, AMD Turion 1.6, ATI RADEON XPRESS 200M chipset, ATI MOBILITY RADEON X300, 1GB RAM, Broadcom 802.11a/b/g WLAN, Bluetooth, 60GB drive, dual booting XP Home/Gusty G., router Negtgear DG834G v3

  2. #2
    L'idioma PIMPL in realtà normalmente si usa per nascondere i dettagli implementativi di una classe (nello specifico, i campi e in generale qualunque cosa che possa alterare il layout binario dalla classe) dagli utilizzatori, tipicamente per evitare problemi di compatibilità binaria o per evitare di dover ricompilare tutto ogni volta che l'implementazione di una classe che il client usa direttamente viene modificata.

    Se non hai di questi problemi non vedo necessità di usare PIMPL, specie se il codice client userebbe esclusivamente puntatori alla classe base (in un certo senso fare riferimento ai metodi solo attraverso una classe base astratta è già di per se una forma di PIMPL direttamente supportata dal linguaggio, visto che tutto quello che il codice client può fare sull'oggetto passa attraverso la sua vtable).
    Amaro C++, il gusto pieno dell'undefined behavior.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.