Có phải O.K. thế nào để xác định chức năng ảo của lớp mẫu bên ngoài cơ thể của nó? Chức năng ảo không thể được gạch chân, nhưng để tránh nhiều định nghĩa trong các đơn vị biên dịch, chúng sẽ được đánh dấu inline
(giả định rằng các tiêu đề mẫu sẽ được bao gồm trong nhiều tệp nguồn). Mặt khác, trình biên dịch tự do bỏ qua inline
, vì vậy điều này có vẻ hợp lệ. Ví dụ: mã bên dưới chính xác:Định nghĩa mẫu bên ngoài lớp cơ thể
template <typename T>
class C
{
public:
virtual void f(T val);
};
template <typename T>
inline
void C<T>::f(T val)
{
//definition
}
?
BTW gcc (3.4.2) cho phép bỏ qua inline
trước định nghĩa hàm f(T val)
nhưng không được trước chức năng tương tự của lớp thông thường. Nó chỉ là hành vi của gcc?
Bạn sử dụng gcc * 3.4.2 *? – jpalecek
@jpalecek trong ví dụ cụ thể này, vâng. – doc
@doc - Chức năng ảo * có thể * được khai báo 'nội tuyến' (nhưng không cần thiết ở đây). Trình biên dịch chỉ có một chút khó khăn hơn để tìm ra chính xác khi nào các hàm có thể được inlined. –