SORU
2 Temmuz 2009, PERŞEMBE


C Standart uzanan miras yoluyla Kütüphane?

C Standart Kütüphanesi genel olarak genişletilmesi için kalıtım kullanarak tasarlanmamıştır yaygın bir inançtır. Kesinlikle, ben (ve diğerleri) std::vector gibi sınıflar türetmek iddia eden insanlar eleştirdiler. Ancak, bu soru: c exceptions, can what() be NULL? uzun olmak üzere Standart Kütüphanenin en az bir parçası olduğunu farketmemi sağladı - std::exception.

Yani, benim soru iki bölümden oluşur:

  1. Türetilen öngörülen diğer Standart Kütüphane sınıfları var mı?

  2. Eğer bir tane varsa std::exception gibi Standart Kütüphane bir sınıf türetmek bir arayüz ISO standardında tanımlanan bağlı? Örneğin, what() üye fonksiyonu bir NTBS iade etmeyen özel bir sınıf kullanılan bir program (null adresi ile geri döndü demek) uygun standart olurdu?

CEVAP
2 Temmuz 2009, PERŞEMBE


İyi güzel soru. Gerçekten Standart biraz daha açık olduğunu amaçlanan kullanımı hakkında diliyoruz. Belki dil standart yanında oturur C Mantığı bir belge olmalı. Her durumda, burada kullandığım yaklaşım

(a) böyle bir listenin varlığından haberdar değilim. Bunun yerine, aşağıdaki liste Standart Kütüphane bir tür miras olarak tasarlanan olma olasılığı olup olmadığını belirlemek için kullanın:

  • virtual herhangi bir yöntem yok eğer doğru değilse, o zaman bir üs olarak kullanarak olmamalıdır. Bu std::vector ve kuralları.
  • Eğer virtual yöntemler var ise, o zaman temel sınıf olarak kullanım için bir aday.
  • Eğer friend tabloların bir sürü etrafında yüzen varsa, o zaman muhtemelen saklama sorun olmadığı çok açık.
  • Eğer bir şablon varsa, o zaman daha yakın önce muhtemelen uzmanlık ile yerine özelleştirebilirsiniz beri miras bak.
  • İlke tabanlı bir mekanizma (, *8 örneğin*) varlığı bir üs olarak kullanıyor olmanız gerekmez mi bu çok iyi bir ipucu olduğunu.

Ne yazık ki güzel bir kapsamlı bilmiyorum yasiyah ve beyazliste. Ben genellikle gut hissediyorum.

(b) LSP burada uygulamak istiyorum. Eğer biri sizin hariç what() çağırırsa, o zaman gözlemlenebilir davranış std::exception ile aynı olmalıdır. Gerçekten standartlara uygun bir konu olarak fazla doğruluk sorunu olduğunu sanmıyorum. Standart alt sınıflar için değiştirilebilir olduğunu gerektirmez. Gerçekten sadece bir< . em ^"en iyi uygulama".

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • akalyne

    akalyne

    13 Mayıs 2009
  • kev5124

    kev5124

    9 Kasım 2008
  • Madeon

    Madeon

    31 Ocak 2010