Ok, ini benar-benar sulit untuk diakui, tetapi saya memiliki godaan yang kuat saat ini untuk diwarisi std::vector
.
Saya membutuhkan sekitar 10 algoritma yang disesuaikan untuk vektor dan saya ingin mereka menjadi anggota vektor secara langsung. Tapi tentu saja saya juga ingin memiliki std::vector
antarmuka yang lain. Nah, ide pertama saya, sebagai warga negara yang taat hukum, adalah memiliki std::vector
anggota di MyVector
kelas. Tapi kemudian saya harus secara manual memberikan kembali semua antarmuka std :: vector. Terlalu banyak mengetik. Selanjutnya, saya berpikir tentang warisan pribadi, sehingga alih-alih memberikan kembali metode saya akan menulis banyak using std::vector::member
di bagian publik. Ini membosankan sebenarnya juga.
Dan di sinilah saya, saya benar-benar berpikir bahwa saya dapat mewarisi dari publik std::vector
, tetapi memberikan peringatan dalam dokumentasi bahwa kelas ini tidak boleh digunakan secara polimorfik. Saya pikir sebagian besar pengembang cukup kompeten untuk memahami bahwa ini seharusnya tidak digunakan secara polimorfik.
Apakah keputusan saya benar-benar tidak dapat dibenarkan? Jika demikian, mengapa? Bisakah Anda memberikan alternatif yang akan membuat anggota tambahan benar-benar anggota tetapi tidak akan melibatkan mengetik ulang semua antarmuka vektor? Saya meragukannya, tetapi jika Anda bisa, saya hanya akan bahagia.
Juga, terlepas dari kenyataan bahwa beberapa orang idiot dapat menulis sesuatu seperti
std::vector<int>* p = new MyVector
apakah ada bahaya realistis lain dalam menggunakan MyVector? Dengan mengatakan realistis saya membuang hal-hal seperti bayangkan fungsi yang mengambil pointer ke vektor ...
Yah, saya sudah menyatakan kasus saya. Saya telah berdosa. Sekarang terserah Anda untuk memaafkan saya atau tidak :)
std::vector
Antarmuka cukup besar, dan ketika C ++ 1x datang, itu akan sangat berkembang. Itu banyak untuk diketik dan lebih berkembang dalam beberapa tahun. Saya pikir ini adalah alasan yang baik untuk mempertimbangkan warisan alih-alih penahanan - jika seseorang mengikuti premis bahwa fungsi-fungsi tersebut harus menjadi anggota (yang saya ragu). Aturan untuk tidak berasal dari wadah STL adalah bahwa mereka tidak polimorfik. Jika Anda tidak menggunakannya, itu tidak berlaku.