thể trùng lặp:
C++ template member function of template class called from template functionCách gọi hàm thành viên mẫu?
template<class T1>
class A
{
public:
template<class T0>
void foo() const {}
};
template<class T0,class T1>
void bar(const A<T1>& b)
{
b.foo<T0>(); // This throws " expected primary-expression before ‘>’ token"
}
tôi có thể thay đổi nó để
b->A<T1>::template foo<T0>();
mà biên dịch tốt. Tuy nhiên, tôi cũng có thể thay đổi nó thành
b.A<T1>::template foo<T0>();
cũng biên dịch cũng được. eh?
Làm cách nào để chính xác gọi hàm thành viên mẫu theo ý nghĩa của mã gốc?
Chúng ta biết những gì hai câu mà thực sự biên dịch nghĩa là gì? Trong ví dụ "nấu chín" này, chúng biên dịch, nhưng trong chương trình thực sự của tôi, nó không biên dịch. – ritter