ฉันมีรหัสนี้:
template <class T>
class MyClass {
public:
template <class U>
void foo() {
U a;
a.invoke();
}
};
ฉันต้องการในรูปแบบนี้:
template <class T>
class MyClass {
public:
template <class U>
void foo();
};
template <class T> /* ????? */
void MyClass<T>::foo() {
U a;
a.invoke();
}
ฉันจะทำสิ่งนี้ได้อย่างไร? ไวยากรณ์ที่ถูกต้องคืออะไร?
ทำไมไม่ทำเพียงแค่ลดฟังก์ชันภายในคลาสปฏิเสธ (ดูcodepad.org/wxaZOMYW ) คุณไม่สามารถย้ายฟังก์ชันปฏิเสธออกจากส่วนหัวได้ดังนั้น ...
—
hiobs
@hiobs: FWIW คุณสามารถย้ายการประกาศไปยังไฟล์ CPP ที่กล่าวว่าฉันได้ทำสิ่งนี้เพียงครั้งเดียวเพื่อทำการแฮกเกอร์ ในกรณีนี้การรู้วิธีทำจึงเป็นสิ่งสำคัญ
—
Thomas Eding
บางครั้งเราต้องย้ายนิยามฟังก์ชันออกไปนอกคลาสหลังจากนิยามของการอ้างอิงที่ต้องการโดยตัวฟังก์ชัน สิ่งนี้เกิดขึ้นเมื่อคลาส A ใช้คลาส B และ B ก็ใช้ A ในกรณีนั้นคุณประกาศ A และ B จากนั้นกำหนดวิธีการ A และ B
—
Wheezil