Microsoft เคยสร้างระบบ C ++ ที่ให้คุณเข้าถึง Windows API (เรียกว่า win32) จากนั้นวันหนึ่งพวกเขาคิดค้น. NET และคิดว่าทุกอย่างต้องเปลี่ยน
ดังนั้นพวกเขาจึงสร้าง "ส่วนต่อขยายที่จัดการสำหรับ C ++" ซึ่งโดยทั่วไปคือ C ++ แต่มีส่วนขยายที่ไม่ได้มาตรฐานโหลดเพิ่มคำหลักที่ต้องการ__gc
สนับสนุนคุณสมบัติ. NET (เช่นการจัดสรรในฮีป GC แทนที่จะเป็นแบบดั้งเดิม)
แต่คนไม่ชอบสิ่งนี้เพราะมันไม่ได้จริง ๆ c ++ มีคำหลักพิเศษทั้งหมดดังนั้น Microsoft จึงออกแบบใหม่และเรียกมันว่า C ++ / CLI ซึ่งมีชุดคำหลักเพิ่มเติมที่เล็กกว่ามาก แต่มีการเปลี่ยนแปลงทางไวยากรณ์เช่น^
(ซึ่งก็คือ การอ้างอิง 'ตัวชี้' ไปยังวัตถุ. NET บนฮีป GC)
ไม่กี่ปีต่อมาและ Microsoft ได้ตระหนักว่า. NET ไม่ได้เป็น bullet Silver ที่พวกเขาบอกว่ามันเป็นและพวกเขายังผสาน Windows และทีมพัฒนา Developer เข้าด้วยกัน ส่วนหนึ่งของการประเมินใหม่นี้นำไปสู่การสร้าง Windows API ใหม่ที่เรียกว่า WinRT ซึ่งเป็นโค้ดเนทีฟทั้งหมดและนี่หมายความว่าส่วนขยายเก่านั้นไม่มีประโยชน์อีกต่อไปดังนั้น Microsoft จึงพัฒนาส่วนขยาย C ++ เป็นส่วนหนึ่งที่ทำงานกับใหม่ WinRT API ง่ายขึ้น - โดยเก็บนามสกุลบางส่วนจาก C ++ / CLI (เช่น ^)
ถ้าอย่างนั้นคุณก็ไปอีกรุ่นที่แตกต่างกันของ C ++ แบบขยายนั่นคือ C ++ แบบผิวเผิน อย่างน้อยรุ่นล่าสุดคือรหัสเนทีฟอีกครั้งดังนั้นคุณไม่จำเป็นต้องใช้ส่วนขยายหากคุณไม่ต้องการเพราะคุณสามารถเข้าถึง API ได้โดยตรง (เรียกว่า WRL และเหมือนกับคลาสเทมเพลต ATL รุ่นเก่า)
หากคุณคิดว่าคุณกำลังเข้ารหัสรหัสข้ามแพลตฟอร์มคุณไม่ต้องการคุณสามารถเปลี่ยนการเรียก API แต่คุณไม่สามารถใช้งาน^
คอมไพเลอร์อื่นที่ไม่ใช่ Visual C ++ ฉันขอแนะนำให้ใช้ WRL API และทำให้รหัสของคุณเป็นมาตรฐานที่สุดเท่าที่จะทำได้เนื่องจาก 'รหัสพิเศษ' ที่คุณต้องเขียนเปรียบเทียบกับ C ++ / CX นั้นไม่ค่อยดีนัก