Tôi đang cố gắng viết một ngữ pháp có thể mở rộng bằng các hàm, nhưng dường như không tìm được cú pháp đúng để chấp nhận một hàm mẫu. Tôi đang sử dụng Visual C++ 2008. Nó sẽ chấp nhận một biến cùng loại với hàm mẫu, hoặc một hàm không có khuôn mẫu tương tự, nhưng không phải là chính hàm mẫu đó.Toán tử tải trọng << chấp nhận chức năng mẫu
Lỗi 1 lỗi C2679: nhị phân '< <': không có nhà điều hành tìm thấy trong đó có một toán hạng bên phải của loại 'quá tải chức năng' (hoặc không có chuyển đổi có thể chấp nhận) (dòng
***
)
class Grammar {
friend Grammar operator << (const Grammar& lhs, const char* rhs) {
return lhs; // append rhs to grammar
}
template<typename T>
friend Grammar operator << (const Grammar& lhs, T (*rhs)()) {
return lhs; // append rhs() to grammar
}
};
template<typename T>
class ExpressionParticle {
};
template<typename T>
ExpressionParticle<T> Expression() ;
ExpressionParticle<int> ExpressionInt();
int _tmain (int argc, _TCHAR *argv[])
{
ExpressionParticle<int> (*p)();
p = Expression<int>;
Grammar() << "p";
Grammar() << p;
Grammar() << ExpressionInt;
Grammar() << Expression<int>; // ***
Loại Expression<int>
là gì nếu đây không phải là loại p ở trên? Loại của nó khác với loại ExpressionInt
như thế nào.
FWIW, đây biên dịch với g ++ 4.4.1 –