Cursore mutevole nell'oggetto di sola lettura?

0

Ho cercato i diversi usi della parola chiave mutable . Ho scoperto che è generalmente usato per il caching, il lazy computing, il mutex, ...

Ma mi chiedo se sia coerente utilizzarlo per un cursore su un oggetto readonly.

Ad esempio, ho una classe sonora e voglio che ogni suono sia in grado di tenere traccia di un cursore di riproduzione, per l'uso di riproduzione / pausa, ma non penso che questo sia parte dello stato del suono. Un suono const non può essere modificato, ma può essere letto.

È corretto rendere mutevole l'attributo del cursore?

    
posta Grizix 26.03.2014 - 15:48
fonte

2 risposte

2

Credo che il tuo design sarebbe meglio se l'attributo del cursore fosse cambiato in una funzione che creava e restituiva un nuovo oggetto cursore che faceva riferimento a questo oggetto sonoro.

In questo modo puoi avere più cursori modificabili che fanno riferimento allo stesso oggetto sonoro, tutti i cursori in diverse posizioni nel file audio - > che è proprio il modo in cui i cursori dovrebbero funzionare.

    
risposta data 26.03.2014 - 15:56
fonte
1

Is it ok to make the cursor attribute mutable ?

No. const è una promessa che i metodi di chiamata sull'oggetto non cambieranno il suo stato in modo osservabile. Io uso il termine osservabile liberamente qui; non ha bisogno di essere osservabile all'interno del programma. Se un oggetto Sound ricorda la sua posizione nella riproduzione, ha uno stato mutabile osservabile, poiché chiamare play() due volte può provocare parti diverse della canzone in riproduzione. Il resto del tuo programma potrebbe non essere in grado di osservarlo tramite l'interfaccia pubblica della classe Sound , ma puoi farlo.

mutable viene in genere utilizzato per il caching / lazy evaluation / memoization perché restituirai sempre gli stessi risultati. Quindi anche se qualcosa all'interno dell'oggetto sta cambiando, non c'è modo di osservare che in realtà non guarda i byte in memoria.

Detto questo, segui il consiglio di Tolomeo - tenere il cursore fuori dall'oggetto è un design più pulito.

    
risposta data 26.03.2014 - 16:04
fonte

Leggi altre domande sui tag