2011-12-27 45 views
74

tôi có mã này:Template chức năng bên trong lớp mẫu

template <class T> 
class MyClass { 
    public: 
     template <class U> 
     void foo() { 
      U a; 
      a.invoke(); 
     } 
}; 

Tôi muốn nó theo hình thức này:

template <class T> 
class MyClass { 
    public: 
     template <class U> 
     void foo(); 
}; 

template <class T> /* ????? */ 
void MyClass<T>::foo() { 
    U a; 
    a.invoke(); 
} 

Làm thế nào tôi có thể làm điều này? Cú pháp đúng là gì?

+0

Tại sao không chỉ làm chức năng decl bên trong decl lớp (xem http://codepad.org/wxaZOMYW)? Tuy nhiên, bạn không thể di chuyển chức năng thoát khỏi tiêu đề, vì vậy ... – hiobs

+0

@hiobs: FWIW, bạn có thể di chuyển khai báo vào tệp CPP. Điều đó nói rằng, tôi đã chỉ làm điều này một lần để làm một số hackery. Trong trường hợp đó, biết làm thế nào để làm điều này là cần thiết. –

Trả lời

116

Viết này:

template <class T> 
template <class U> 
void MyClass<T>::foo() { /* ... */ } 
+0

void MyClass :: foo () ... cảm ơn, tôi đã thử nó trước đây, nhưng nó không hoạt động với tôi .. có lẽ tôi đã phải làm dự án sạch sẽ. – Michael

+0

@ user1074367: Không, tôi nghĩ như tôi đã nói. –

+3

thực sự tôi đã viết: mẫu mẫu trống MyClass :: foo() { \t U a; \t a.invoke(); } và nó hoạt động – Michael

Các vấn đề liên quan