คำถามติดแท็ก using-declaration

7
อะไรคือความแตกต่างระหว่าง 'typedef' และ 'using' ใน C ++ 11?
ฉันรู้ว่าใน C ++ 11 ตอนนี้เราสามารถใช้usingเพื่อเขียนนามแฝงประเภทเช่นtypedefs: typedef int MyInt; คือจากสิ่งที่ฉันเข้าใจเทียบเท่ากับ: using MyInt = int; และไวยากรณ์ใหม่นั้นเกิดขึ้นจากความพยายามที่จะมีวิธีในการแสดงออก " template typedef": template< class T > using MyType = AnotherType< T, MyAllocatorType >; แต่ด้วยสองตัวอย่างแรกที่ไม่ใช่แม่แบบมีความแตกต่างเล็กน้อยอื่น ๆ ในมาตรฐานหรือไม่ ตัวอย่างเช่นใช้typedefนามแฝงด้วยวิธี "อ่อนแอ" นั่นคือมันไม่ได้สร้างประเภทใหม่ แต่มีเพียงชื่อใหม่เท่านั้น (การแปลงนั้นมีนัยยะระหว่างชื่อเหล่านั้น) มันเหมือนกันกับusingหรือสร้างชนิดใหม่หรือไม่ มีความแตกต่างหรือไม่?

4
เหตุใดจึงมีการใช้สองประโยคในการแก้ไขประเภทเดียวกันที่เห็นว่ามีความน่าสงสัยใน gcc
ฉันมีคลาสพื้นฐานสองคลาสที่ใช้ส่วนคำสั่ง class MultiCmdQueueCallback { using NetworkPacket = Networking::NetworkPacket; .... } class PlcMsgFactoryImplCallback { using NetworkPacket = Networking::NetworkPacket; .... } ฉันประกาศชั้นเรียน class PlcNetwork : public RouterCallback, public PlcMsgFactoryImplCallback, public MultiCmdQueueCallback { private: void sendNetworkPacket(const NetworkPacket &pdu); } คอมไพเลอร์ตั้งค่าสถานะการอ้างอิงข้อผิดพลาด 'NetworkPacket' ไม่ชัดเจน 'sendNetworkPacket (NetworkPacket & ... ' ตอนนี้ทั้งสองใช้ 'การใช้คำสั่ง' เพื่อเครือข่ายระดับพื้นฐานเดียวกัน: NetworkPacket และในความเป็นจริงถ้าฉันแทนที่การประกาศวิธีการด้วย: void …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.