Şu an üzerinde çalıştığım C++ (çoğunlukla eğlence için) bir kütüphane yapıyorum (yıl, haha) Bu sadece bir hobi)Yapılandırılmamış bir kitaplığa dayanan bir const-correct (C++) kitaplığı oluşturma
Son zamanlarda bazı kütüphaneleri başka bir kütüphaneye (okuma, kütüphane bağımlılığı) değiştirdim. Ne yazık ki, söz konusu kütüphane 'const-correctness' ile hiç ilgilenmiyor. Ben biraz OKBim ve kendimi "The Right Way ™" yapmak için kendimi zorlamaktan hoşlanırım, bu yüzden kütüphanemde uydurma yapmak istiyorum. Bunu birkaç kez başlattım ve bazı bölümler; Baştan başa baştan başlamak için daha iyi olduğunu biliyorum, ama bu gerçekten alakalı ya da tartışmaya açık değil. Gerçek şu ki, onu tekrar kazanmak istiyorum, ama diğer kütüphane bunu yapmamı engelliyor.
Bunu biliyor musunuz?
Açıkça anlaşılması gereken bir yöntemi çağırıyorsam (aslında herhangi bir şeyi değiştirmiyor) ve yöntemim aynı zamanda bir inisiye (yeni sözcük) için bir adaysa, yapılamamdan emin değilim. Diğer yöntemin aynı zamanda aynı şekilde bir yöntem olduğunu.
Örnek:
// 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!
}
};
Bu ampirik kanıtlardan ve const-lık hakkında benim araştırma ve anlayış beri bana sadece belirgindir. Bununla birlikte, bu yanlış bir şekilde oluşturulmuş bir anlayış olabilir, bu yüzden yanlış (ve umutlu) yanlış olduğunu ve başka bir şekilde gösterilmediğini (her ne kadar bu konuda bir anlayışa sahip olduğumu anladım)) eğer uygun bir kütüphane yazmak istiyorsa (ancak) bir bağımlılık bu şekilde yazılmıyorsa ne yapmalı?
Umarım bu, SO için uygun bir sorudur. Lütfen (eminim) emin değilseniz bana bildirin ya da yayınlamak için daha iyi bir StackExchange sitesi varsa.
P.S. Ben this SO question buldum, ama konu/çözüm üzerinde ayrıntılı olabilir umuyordum.
Lütfen kötü tasarlanmış 3 parti kütüphane fonksiyonunun bir örneği ve kütüphanenizin bu kütüphane sınıfını nasıl kullandığını öğrenmek için bazı kodları gösteriniz – aschepler
Bu, const_cast 'için bir nedendir. Eğer bir fonksiyonun gerçekten hiçbir şeyi değiştirmediğinden emin olabilirsiniz (ancak 'değişebilir' veri üyeleri) veya bir nesnenin const olarak tanımlanmadığını biliyorsanız, Evet, 'const_cast' tip sistemde bir delik açar, bu yüzden dikkatli kullanın – dyp
@dyp bu benim' const_cast 'anlayışım, ama siz söylediğin gibi ... pek çok şeyin beyanını izleme gereği var mı? Her şey? Korumak için bir kâbus gibi geliyor ve hala _were_ 'const' olarak tanımlanan nesnelerin olduğu durumları çözememektedir. Kabul eder misin –