(Not: tuple
ve tie
Boost veya C ++ 11'den alınabilir.)
Yalnızca iki öğeli küçük yapılar yazarken std::pair
, operator<
katı-zayıf sıralama gibi tüm önemli şeyler bu veri türü için zaten yapıldığından, bazen a seçme eğilimindeyim. .
Olumsuz yönleri, oldukça işe yaramaz değişken isimleridir. Kendimi o yarattı bile typedef
, ben 2 gün sonra hatırlamayacaksınız first
ve hangi second
onlar aynı türden ikisi de, özellikle eğer tam olarak. İkiden fazla üye için bu durum daha da kötüleşiyor, çünkü yuvalama pair
oldukça berbat.
Bunun için diğer seçenek birtuple
ya Boost ya da C ++ 11'den, ancak bu gerçekten daha hoş ve net görünmüyor. Bu yüzden, gerekli karşılaştırma operatörleri de dahil olmak üzere yapıları kendim yazmaya geri dönüyorum.
Özellikle, operator<
oldukça külfetli olabileceğinden, sadece aşağıdakiler için tanımlanan işlemlere güvenerek tüm bu karmaşadan kurtulmayı düşündüm tuple
:
Örneğin, operator<
katı-zayıf-sıralama örneği :
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
Bir hale getirir tuple
ve T&
geçirilen ifade referanslar).
Düzenleme : @DeadMG'den özel olarak miras alma önerisi tuple
kötü değil, ancak bazı dezavantajları var:
- Operatörler bağımsızsa (muhtemelen arkadaş), herkese açık olarak miras almam gerekir
- Döküm ile, işlevlerim / işleçlerim (
operator=
özellikle) kolayca atlanabilir - İle
tie
onlar sipariş için önemli değil eğer çözümü, ben bazı üyelerini bırakabilir
Bu uygulamada dikkate almam gereken herhangi bir sakınca var mı?