Ich baue eine Bibliothek in C++ (meistens zum Spaß), an der ich schon eine Weile arbeite (Jahre, haha Es ist nur ein Hobby)Erstellen einer Const-Korrekten (C++) Bibliothek, die auf einer nicht-Konst-Correct-Bibliothek basiert
Ich habe kürzlich einige der Grundlagen (lesen, Bibliothek Abhängigkeit) in eine andere Bibliothek. Leider handelt es sich bei dieser Bibliothek nicht um "const-correctness". Ich bin ein bisschen OCD und ich mag es mich selbst herauszufordern Dinge zu tun "The Right Way ™", also möchte ich meine Bibliothek const-correct machen. Ich habe das ein paar Mal begonnen, und einige Teile sind; Ich weiß, dass es besser ist, const-correct von Anfang an zu starten, aber das ist nicht wirklich relevant oder zur Debatte. Tatsache ist, dass ich daran interessiert bin, es wieder ernst zu machen, aber die andere Bibliothek hindert mich daran.
Hows das, könnten Sie fragen?
Nun, wenn ich eine Methode aufrufen, die eindeutig const sein sollte (ändert eigentlich nichts), und meine Methode ist auch ein Kandidat für const-ing (neues Wort), kann ich const-ness auf meinem nicht sicherstellen Methode, bis diese andere Methode auch const ist.
Beispiel:
// 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!
}
};
Dies ist nur ein scheinbar mich aus empirischen Daten und aus meiner Forschung und Verständnis über const-ness. Allerdings könnte dies ein falsch gebildetes Verständnis sein, so dass ich offen bin (und hoffnungsvoll?), Dass es falsch ist und anders gezeigt wird (obwohl das die Grundlage meines Verständnisses von const-ness erschüttern würde)
Was ist eine arme Seele zu tun, wenn er (oder sie) eine richtige Bibliothek schreiben möchte, aber eine Abhängigkeit ist nicht so geschrieben?
Ich hoffe, das ist eine angemessene Frage für SO. Bitte (ich bin mir sicher, dass du es willst) lass es mich wissen, wenn es nicht ist oder es eine bessere StackExchange-Seite gibt, auf der es gepostet werden kann.
P.S. Ich habe this SO question gefunden, aber ich hatte gehofft, dass das Thema/die Lösung ausgearbeitet werden könnte.
Bitte zeigen Sie etwas Code, wie ein Beispiel einer schlecht entworfenen Bibliotheksfunktion von Drittanbietern, und wie Ihre Bibliothek die Klasse dieser Bibliothek verwendet. – aschepler
Wenn ich Sie richtig verstehe, Dies ist ein Grund für "const_cast". Wenn Sie sicher sind, dass eine Funktion wirklich nichts verändert (aber "veränderliche" Datenelemente), oder wenn Sie wissen, dass ein Objekt nicht als const definiert wurde, können Sie das Objekt wegwerfen constness Ja, 'const_cast' steckt ein Loch in das Typsystem, also benutze es vorsichtig – dyp
@dyp das ist mein Verständnis von' const_cast' auch, aber wie du es sagst i führt die Notwendigkeit ein, die Erklärung von ... vielen Dingen zu überwachen? Alles? Es klingt wie ein Albtraum, den es zu erhalten gilt, und es würde immer noch keine Situationen lösen, in denen Objekte als "const" definiert sind. Würdest du zustimmen? –