2011-10-08 7 views
5

Các hàm thành viên của lớp có thể là các hàm mẫu, hoặc phải là các hàm lớp tĩnh. Về cơ bản có thể các lớp học và chức năng được kỹ thuật instantiated riêng theo yêu cầu?Các phương thức mẫu và các lớp mẫu C++

Những hạn chế của việc sử dụng hàm mẫu làm thành viên của một lớp mẫu là gì? Cả hai có thể được thực hiện cùng một lúc hay không?

Trả lời

9

Bạn có thể có chức năng template thành viên của các lớp mẫu, như sau:

template <typename T> 
class Foo { 
public: 
    template <typename U> 
    void bar(const T& t, const U& u); 
}; 

template <typename T> 
template <typename U> 
void Foo<T>::bar(const T& t, const U& u) { 
    // ... 
} 
6

Phương thức lớp có thể là mẫu. Giới hạn duy nhất là chúng không thể ảo.

EDIT:

Để được hoàn chỉnh hơn, nhà xây dựng cũng có thể là mẫu

class X 
{ 

    template<typename T> 
    X(T t) 
    { 

    } 

}; 

Nhưng tất nhiên, đó chỉ nên là một phi mẫu destructor

+0

Bạn đã thực sự là một điểm tốt về không phải là ảo :-) +1 – rubixibuc