class IDontControl
{
class Nested
{
Nested(int i);
};
};
ฉันต้องการการอ้างอิงล่วงหน้าเช่น:
class IDontControl::Nested; // But this doesn't work.
วิธีแก้ปัญหาของฉันคือ:
class IDontControl_Nested; // Forward reference to distinct name.
ต่อมาเมื่อฉันสามารถใช้คำจำกัดความเต็ม:
#include <idontcontrol.h>
// I defined the forward ref like this:
class IDontControl_Nested : public IDontControl::Nested
{
// Needed to make a forwarding constructor here
IDontControl_Nested(int i) : Nested(i) { }
};
เทคนิคนี้อาจเป็นปัญหามากกว่าที่ควรจะเป็นหากมีคอนสตรัคเตอร์ที่ซับซ้อนหรือฟังก์ชั่นสมาชิกพิเศษอื่น ๆ ที่ไม่ได้รับการถ่ายทอดอย่างราบรื่น ฉันจินตนาการได้เลยว่าเทมเพลตบางตัวมีปฏิกิริยาไม่ดี
แต่ในกรณีที่เรียบง่ายของฉันดูเหมือนว่าจะทำงาน