'demet' ve 'kravat ile karşılaştırma operatörleri uygulama', iyi bir fikir mi?
(NOT: tuple
tie
Artırma veya C 11. alınabilir)
Yazı yazarken küçük yapılar ile yalnızca iki öğe, bazen eğilimindedir seçimi için std::pair
, gibi tüm önemli şeyler zaten yaptığım için bu veri türü, gibi operator<
katı-zayıf-sipariş.
Bu olumsuzlukları olsa hoş çok yararsız değişken isimleri. Eğer ben kendimi typedef
2 gün sonra first
ne hatırlamayacağım ve second
tam olarak ne yarattıysa bile, özellikle eğer aynı türden iseler de. Bu pair
s oldukça berbat ikiden fazla üye için daha da kötüsü, iç içe geçmiş olur.
Bunun için diğer seçeneği tuple
, baskının ya da C gerçekten hiç hoş görünmüyor 11, ama bir ve daha nettir. Geri yapılar kendimi, gerekli karşılaştırma operatörleri gibi yazmak için gittim.
operator<
özellikle oldukça hantal olabilir bu yana, sadece işlemleri tuple
tanımlanmış güvenerek bu karmaşayı engellemeyi düşündüm:
Örnek katı-zayıf-sipariş için operator<
, örneğin:
bool operator<(MyStruct const& lhs, MyStruct const& rhs){
return std::tie(lhs.one_member, lhs.another, lhs.yet_more) <
std::tie(rhs.one_member, rhs.another, rhs.yet_more);
}
(tie
geçirilen bağımsız değişkenleri tuple
T&
bir başvuru yapar.)
Edit: @Özel olarak miras tuple
için DeadMG gelen öneri kötü biri değil, ama oldukça bazı sakıncaları var:
- Eğer operatörler free-standing (muhtemelen arkadaşları) ise, alenen devralmak istiyorum
- Döküm ile, fonksiyonları / operatörleri (
operator=
özellikle) kolayca yan yol olabilir tie
çözüm, sipariş için onların önemi yok ama bazı üyeleri ihmal etmem
Düşünmem gereken bu uygulamada herhangi bir dezavantajı var mı?
CEVAP
Bu kesinlikle daha kolay kendiniz çalışırken daha doğru bir operatör yazmak için gidiyor. Söylersen profil karşılaştırma uygulamanın zaman alıcı bir parçası olmak için operasyon gösteriyorsa farklı bir yaklaşım olacağını düşünüyorum. Aksi takdirde bu bakımı kolay Olası performans kaygıları ağır basar.
python karşılaştırma demet...
'In Scala desen eşleştirme sistem...
Nasıl PHP eşitlik (== çift eşittir) ve...
Web Uygulama Sorunları (web.hataları c...
PHP global değişkenleri olarak kötü bi...