Tôi có một lớp templated với một chức năng thành viên templatedChuyên ngành chức năng thành viên templated trong lớp templated
template<class T>
class A {
public:
template<class CT>
CT function();
};
Bây giờ tôi muốn chuyên chức năng thành viên templated trong 2 cách. Đầu tiên cho có loại giống như lớp:
template<class T>
template<> // Line gcc gives an error for, see below
T A<T>::function<T>() {
return (T)0.0;
}
Thứ hai cho loại bool:
template<class T>
template<>
bool A<T>::function<bool>() {
return false;
}
Dưới đây là cách tôi đang cố gắng thử nghiệm nó:
int main() {
A<double> a;
bool b = a.function<bool>();
double d = a.function<double>();
}
Bây giờ gcc mang lại cho tôi cho dòng được đánh dấu ở trên:
error: invalid explicit specialization before ‘>’ token
error: enclosing class templates are not explicitly specialize
Vì vậy, gcc đang nói với tôi, rằng tôi phải chuyên A, nếu tôi muốn chuyên chức năng, phải không? Tôi không muốn làm điều đó, tôi muốn loại lớp bên ngoài được mở ...
Câu trả lời cuối cùng: điều đó là không thể? Hay là có cách nào?
có thể trùng lặp của http://stackoverflow.com/q/3040201/498253 – Tom