ในไลบรารีช่วงมีการดำเนินการสองประเภท:
- มุมมองที่ขี้เกียจและต้องการภาชนะที่มีอยู่
- การกระทำที่กระตือรือร้นและสร้างภาชนะใหม่เป็นผลลัพธ์ (หรือแก้ไขสิ่งที่มีอยู่)
มุมมองมีน้ำหนักเบา คุณผ่านค่าเหล่านั้นและกำหนดให้คอนเทนเนอร์พื้นฐานยังคงใช้ได้และไม่เปลี่ยนแปลง
จากเอกสารrange-v3
มุมมองคือ wrapper ที่มีน้ำหนักเบาซึ่งแสดงมุมมองของลำดับขององค์ประกอบในแบบกำหนดเองโดยไม่ต้องปิดบังหรือคัดลอก จำนวนการดูมีราคาถูกในการสร้างและคัดลอกและมีความหมายอ้างอิงที่ไม่ได้เป็นเจ้าของ
และ:
การดำเนินการใด ๆ ในช่วงข้อมูลพื้นฐานที่ทำให้การวนซ้ำของมันหรือผู้ดูแลระบบนั้นจะทำให้มุมมองใด ๆ ที่อ้างถึงส่วนใดส่วนหนึ่งของช่วงนั้นเป็นโมฆะ
การทำลายของภาชนะบรรจุต้นแบบทำให้การวนซ้ำทั้งหมดไม่ถูกต้อง
ในรหัสของคุณคุณจะ specifially โดยใช้มุมมอง - ranges::views::transform
คุณใช้ ท่อเป็นเพียงน้ำตาลเชิงประโยคเพื่อให้ง่ายต่อการเขียนในแบบที่เป็น คุณควรดูสิ่งสุดท้ายในท่อเพื่อดูสิ่งที่คุณผลิต - ในกรณีของคุณมันเป็นมุมมอง
หากไม่มีตัวดำเนินการไปป์ก็อาจมีลักษณะเช่นนี้:
ranges::views::transform(my_custom_rng_gen(some_param), my_transform_op)
หากมีการเปลี่ยนแปลงหลายอย่างเชื่อมโยงกันด้วยวิธีนี้คุณจะเห็นได้ว่ามันน่าเกลียดแค่ไหน
ดังนั้นหากmy_custom_rng_gen
สร้างคอนเทนเนอร์บางชนิดที่คุณแปลงแล้วส่งคืนคอนเทนเนอร์นั้นจะถูกทำลายและคุณได้ทำการอ้างอิงจากมุมมองของคุณ หากmy_custom_rng_gen
เป็นอีกมุมมองหนึ่งของคอนเทนเนอร์ที่อยู่นอกขอบเขตเหล่านี้ทุกอย่างก็ใช้ได้
อย่างไรก็ตามคอมไพเลอร์ควรสามารถรับรู้ว่าคุณกำลังใช้มุมมองบนคอนเทนเนอร์ชั่วคราวและกดคุณด้วยข้อผิดพลาดในการรวบรวม
หากคุณต้องการให้ฟังก์ชันของคุณส่งคืนช่วงเป็นคอนเทนเนอร์คุณจะต้อง "ผลลัพธ์" ให้ชัดเจน สำหรับสิ่งนั้นให้ใช้ranges::to
โอเปอเรเตอร์ในฟังก์ชั่น
อัปเดต:หากต้องการแสดงความคิดเห็นเพิ่มเติมเกี่ยวกับความคิดเห็นของคุณเพิ่มเติม"เอกสารระบุว่าการเขียนช่วง / การไพพ์ใช้และเก็บมุมมองไว้ที่ไหน"
ไปป์เป็นเพียงน้ำตาล syntactic เพื่อเชื่อมต่อสิ่งต่าง ๆ ในนิพจน์ที่อ่านง่าย ขึ้นอยู่กับวิธีการใช้งานมันอาจจะใช่หรือไม่ใช่คืนมุมมอง มันขึ้นอยู่กับอาร์กิวเมนต์ด้านขวา ในกรณีของคุณมันคือ:
`<some range> | ranges::views::transform(...)`
ดังนั้นผลตอบแทนการแสดงออกสิ่งที่views::transform
ผลตอบแทน
ตอนนี้โดยการอ่านเอกสารของการแปลง:
ด้านล่างนี้เป็นรายการของ combinators ช่วงสันหลังยาวหรือมุมมองที่ Range-v3 นำเสนอและแจ้งให้ทราบเกี่ยวกับวิธีการใช้งานแต่ละอย่าง
[ ... ]
views::transform
กำหนดช่วงของแหล่งที่มาและฟังก์ชัน unary ให้ส่งคืนช่วงใหม่ที่องค์ประกอบผลลัพธ์แต่ละรายการเป็นผลลัพธ์ของการใช้ฟังก์ชัน unary กับองค์ประกอบแหล่งที่มา
ดังนั้นจึงส่งกลับค่าช่วง แต่เนื่องจากเป็นตัวดำเนินการที่ไม่ได้ใช้งานช่วงที่ส่งคืนจึงเป็นมุมมองที่มีความหมายทั้งหมด