Sto costruendo una libreria in C++ (principalmente per divertimento) a cui sto lavorando da un po 'di tempo (anni, haha , è solo un hobby)Creazione di una libreria const-correct (C++) che si basa su una libreria non costante alla costante
Recentemente ho cambiato alcune delle basi (leggi, dipendenze della libreria) in un'altra libreria. Sfortunatamente, la biblioteca non è affatto interessata da "costituttezza". Sono un po 'OCD e mi piace sfidarmi a fare cose "The Right Way ™", quindi mi piacerebbe rendere la mia libreria costante. Ho iniziato questo alcune volte, e alcune parti sono; So che è meglio iniziare da const-correct dall'inizio, ma questo non è veramente rilevante o pronto per il dibattito. Il fatto è che sono interessato a dargli un serio ritorno, ma l'altra libreria mi impedisce di farlo.
Come, potresti chiedere?
Beh, se sto chiamando un metodo che dovrebbe essere chiaramente const (in realtà non cambia nulla), e il mio metodo è anche un candidato per la costante (nuova parola), non posso garantire la costanza sul mio metodo fino a quando anche l'altro metodo è const.
Esempio:
// Bad third-party library
struct Foo
{
void should_be_const() {}
};
// My library
struct Bar
{
Foo my_foo;
void should_be_const() const
{
my_foo.should_be_const(); // ERROR! Not a const function!
}
};
Questo è solo apparente a me da prove empiriche e dalla mia ricerca e comprensione di const-ness. Tuttavia, questa potrebbe essere una comprensione falsamente formata, quindi sono aperto (e fiducioso?) A ciò che è sbagliato e mostrato diversamente (anche se ciò scuoterebbe le fondamenta della mia comprensione della haha)
Cos'è un'anima povera fare se lui (o lei) vuole scrivere una libreria corretta ma una dipendenza non è scritta in quel modo?
Spero che questa sia una domanda appropriata per SO. Per favore (sono sicuro che lo farai) fammi sapere se non lo è o se c'è un sito StackExchange migliore per pubblicarlo.
P.S. Ho trovato this SO question, ma speravo che l'argomento/la soluzione potesse essere elaborata.
Si prega di mostrare un po 'di codice, come un esempio di una funzione di libreria di terze parti mal progettata e come la libreria utilizza la classe di quella libreria. – aschepler
Se ho capito bene, questa è una delle ragioni per 'const_cast'. Se sei sicuro che una funzione non modifica nulla (ma i membri dei dati 'mutabili'), o se sai che un oggetto non è stato definito come const, puoi scartare constness. Sì, 'const_cast' mette un buco nel sistema dei tipi, quindi usalo con cautela. – dyp
@dyp è la mia comprensione di' const_cast' anche, ma come dici tu io introduce la necessità di monitorare la dichiarazione di ... un sacco di cose? Qualunque cosa? Sembra un incubo da mantenere, e non risolverà mai le situazioni in cui gli oggetti _ sono stati definiti come 'const'. Sei d'accordo? –