Làm cách nào để sử dụng BOOST_FOREACH một cách hiệu quả (số lượng ký tự/khả năng đọc khôn ngoan) với tăng :: ptr_map?Cách sử dụng BOOST_FOREACH với tăng :: ptr_map?
Kristo chứng minh trong answer mình rằng nó có thể sử dụng BOOST_FOREACH với một ptr_map, nhưng nó không thực sự tiết kiệm cho tôi bất kỳ gõ (hoặc làm cho mã của tôi thực sự dễ đọc hơn) so với iterating trên ptr_map với một iterator:
typedef boost::ptr_container_detail::ref_pair<int, int* const> IntPair;
BOOST_FOREACH(IntPair p, mymap) {
int i = p.first;
}
// vs.
boost::ptr_map<int, T>::iterator it;
for (it = mymap.begin(); it != mymap.end(); ++it) {
// doSomething()
}
Đoạn mã sau nằm ở đâu đó dọc theo những gì tôi muốn. Nó theo cách tiêu chuẩn về cách sử dụng BOOST_FOREACH với một std :: map. Đáng tiếc là điều này không biên dịch:
boost::ptr_map<int, T> mymap;
// insert something into mymap
// ...
typedef pair<int, T> IntTpair;
BOOST_FOREACH (IntTpair &p, mymap) {
int i = p.first;
}
Cảm ơn bạn Kristo, đây là những gì tôi cuối cùng cũng đã đưa ra. Tuy nhiên, đối với điều này phải viết rất nhiều trong typedef, rằng nó không phải là một từ viết tắt thực sự so với tiêu chuẩn cho (ptr_map :: iterator it = mymap.begin(); it! = Mymap.end(); ++ nó) {} nữa ... –
Martin
Tôi đồng ý. Tôi quan tâm để xem nếu có một cách ngắn hơn (tốt hơn?) Để viết rằng typedef. Bạn cũng phải xem xét đồng nghiệp của mình. Có bao nhiêu người trong số họ sẽ nói, "Bạn đã viết một typedef điên chỉ để cho bạn sử dụng BOOST_FOREACH? Chỉ cần viết bình thường cho vòng lặp và được thực hiện." :) –