Tôi có một vấn đề với một đoạn mã có dạng như sau:Gọi đến chức năng template thành viên không biên dịch
template<class Type>
class Class1 {
public:
template<class TypeName1> TypeName1* method1() const {return 0;}
};
struct Type1{};
struct Type2{};
class Class2 {
public:
template<typename TypeName1, typename TypeName2>
int method2() {
Class1<TypeName2> c;
c.method1<TypeName1>();
return 0;
}
int method1() {
return method2<Type1, Type2>();
}
};
int
main() {
Class2 c;
return c.method1();
}
Khi biên dịch với trình biên dịch tại codepad:
tôi nhận được lỗi sau:
t.cpp: In member function 'int Class2::method2()': Line 15: error: expected primary-expression before '>' token compilation terminated due to -Wfatal-errors.
Dòng vi phạm là yêu cầu chức năng template thành viên:
c.method1<TypeName1>();
Câu trả lời hay. Ngôn ngữ khủng khiếp. –
Làm việc như một say mê, sẽ chấp nhận trong 5 phút! –
+1. Cụ thể trong bối cảnh này, mặc dù 'Class1' được chuyển tiếp khai báo, nó không thể được giả định rằng' Class1 :: method1' là một hàm mẫu. Một chuyên môn mẫu của 'Class1' ở nơi khác có thể chứng minh khác. –