Tamam, itiraf etmek gerçekten zor, ama şu anda miras almak için güçlü bir cazibem var std::vector
.
Vektör için yaklaşık 10 özelleştirilmiş algoritmaya ihtiyacım var ve bunların doğrudan vektörün üyesi olmasını istiyorum. Ama doğal olarak geri kalan std::vector
arayüzüne de sahip olmak istiyorum . Yasalara uyan bir vatandaş olarak ilk fikrim sınıfta bir std::vector
üyeye sahip MyVector
olmaktı. Ama sonra tüm std :: vector arabirimini el ile yeniden oluşturmak zorunda kalacaktım. Yazmak için çok fazla. Daha sonra, özel miras hakkında düşündüm, böylece yöntemleri yeniden sunmak yerine using std::vector::member
genel bölüme bir sürü yazarım . Bu aslında sıkıcı.
Ve işte buradayım, sadece halka açık bir şekilde miras alabileceğimi düşünüyorum std::vector
, ancak dokümantasyonda bu sınıfın polimorfik olarak kullanılmaması gerektiğine dair bir uyarı sağlıyorum. Çoğu geliştiricinin bunun polimorfik olarak kullanılmaması gerektiğini anlayacak kadar yetkin olduğunu düşünüyorum.
Kararım kesinlikle haksız mı? Öyleyse neden? Ek üyelerin gerçekten üyelerine sahip olacak, ancak vektörün tüm arayüzünün yeniden yazılmasını gerektirmeyecek bir alternatif sağlayabilir misiniz ? Bundan şüphe ediyorum, ama yapabilirsen mutlu olurum.
Ayrıca, bazı aptalların şöyle bir şey yazabilmeleri dışında
std::vector<int>* p = new MyVector
MyVector'u kullanmanın başka gerçekçi tehlikesi var mı? Gerçekçi diyerek, vektörü göstermek için bir işaretçi gerektiren bir işlevi hayal etmek gibi şeyleri atıyorum ...
Benim durumumu ifade ettim. Günah işledim. Şimdi beni affetmek ya da affetmemek size kalmış :)
std::vector
'in arayüzü oldukça büyük ve C ++ 1x ortaya çıktığında, büyük ölçüde genişleyecek. Bu yazılacak çok şey ve birkaç yıl içinde daha da genişleyecek. Bence bu, kontrol altına almak yerine kalıtımı dikkate almak için iyi bir neden - eğer bu işlevlerin üye olması gerektiği fikrini takip ederseniz (şüpheliyim). STL kaplarından türetmeme kuralı, polimorfik olmamalarıdır. Bunları bu şekilde kullanmıyorsanız, geçerli değildir.