(Catatan: tuple
dan tie
dapat diambil dari Boost atau C ++ 11.)
Saat menulis struct kecil dengan hanya dua elemen, saya terkadang cenderung memilih a std::pair
, karena semua hal penting sudah dilakukan untuk tipe data itu, seperti operator<
untuk pengurutan yang ketat-lemah .
Kerugiannya adalah nama variabel yang tidak berguna. Bahkan jika saya sendiri yang membuatnya typedef
, saya tidak akan ingat 2 hari kemudian apa first
dan apa second
sebenarnya itu, terutama jika keduanya memiliki tipe yang sama. Ini menjadi lebih buruk untuk lebih dari dua anggota, karena bersarang pair
cukup menyebalkan.
Opsi lain untuk itu adalah atuple
, baik dari Boost atau C ++ 11, tetapi itu tidak terlihat lebih bagus dan lebih jelas. Jadi saya kembali menulis struct sendiri, termasuk operator perbandingan yang diperlukan.
Karena khususnya operator<
bisa sangat rumit, saya berpikir untuk menghindari seluruh kekacauan ini hanya dengan mengandalkan operasi yang ditentukan untuk tuple
:
Contoh dari operator<
, misalnya untuk pengurutan-ketat-lemah:
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
Membuat tuple
dari T&
referensi dari argumen berlalu.)
Sunting : Saran dari @DeadMG untuk mewarisi secara pribadi tuple
bukanlah hal yang buruk, tetapi ada beberapa kekurangan:
- Jika operatornya berdiri bebas (mungkin teman), saya perlu mewarisi secara publik
- Dengan transmisi, fungsi / operator saya (
operator=
secara khusus) dapat dengan mudah dilewati - Dengan
tie
solusinya, saya dapat meninggalkan anggota tertentu jika mereka tidak peduli dengan pemesanan
Apakah ada kekurangan dalam penerapan ini yang perlu saya pertimbangkan?