Tôi có mã này:
template <class T>
class MyClass {
public:
template <class U>
void foo() {
U a;
a.invoke();
}
};
Tôi muốn nó ở dạng 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ì?
Tại sao không chỉ khai báo hàm bên trong khai báo lớp (xem codepad.org/wxaZOMYW )? Bạn vẫn không thể di chuyển hàm khai báo ra khỏi tiêu đề, vì vậy ...
—
hiobs 27/12/11
@hiobs: FWIW, bạn có thể chuyển tờ khai vào tệp CPP. Điều đó nói rằng, tôi chỉ làm điều này một lần để thực hiện một số hack. Trong trường hợp đó, biết cách làm điều này là điều cần thiết.
—
Thomas Eding
Đôi khi người ta phải di chuyển định nghĩa hàm ra bên ngoài lớp, sau khi định nghĩa các phụ thuộc cần thiết của thân hàm. Điều này xảy ra khi lớp A sử dụng lớp B và B cũng sử dụng A. Trong trường hợp đó bạn khai báo A và B, sau đó xác định các phương thức A và B.
—
Wheezil