Çalıştığım yaygın bir tasarım problemi, iki değişkeni bir araya getirmem ve daha sonra anlamlı bir şekilde referans verme yeteneğini kaybetmem.std :: pair kullanabilir, ancak .first ve .second üye adlarını yeniden adlandırabilir miyim?
std::pair<int,int> cords;
cord.first = 0; //is .first the x or y coordinate?
cord.second = 0; //is .second the x or y coordinate?
yerine temel yapılar yazma düşündünüz ettik ama sonra std::pair
ile birlikte gelen pek çok yarar kaybetmek:
- make_pair
- üye olmayan aşırı operatörler
- takas edin
- vb
first
ve second
veri üyeleri için bir alternatif tanımlayıcıyı yeniden adlandırmanın veya sağlamanın bir yolu var mı?
Ben std::pair
kabul fonksiyonların hepsi kaldıraç umuyordum,
ama yine de aşağıdaki şekilde bunları kullanabilmek için: Bu çevrede alabilir
std::pair<int,int> cords;
//special magic to get an alternative name of access for each data member.
//.first and .second each have an alternative name.
cords.x = 1;
assert(cords.x == cords.first);
kullanabilirsiniz. Belki std :: pair sarar bir sınıf yapmak? –
Muhtemelen görev tanımlandığı gibi aşırı yüklenen, ancak [BOOST_FUSION_DEFINE_STRUCT] (http://www.boost.org/doc/libs/1_59_0/libs/fusion/doc/html/fusion/adapted/define_struct.html) oluşturmanıza olanak tanır karşılaştırma operatörleri, takas vb. otomatik olarak oluşturulan, ancak özel alan adlarına/türlerine sahip bir yapı. – Mankarse
Yapı kordları hakkında: std :: pair {int & x = this-> first; int & y = this-> ikinci; }; '? –
Slava