2010-11-20 35 views
5

Làm thế nào tôi có thể định nghĩa một biến thành viên tĩnh cũng là luồng cục bộ bên trong một lớp mẫu? Tôi nghĩ rằng tôi đã tìm ra cách để làm điều đó trong GCC, nhưng muốn xác nhận điều này sẽ làm việc một cách chính xác về liên kết, khởi tạo và giải quyết. Ngoài ra các bản dịch sang trình biên dịch khác sẽ rất hữu ích (như MSVC) vì vậy tôi có thể nhận được một macro tốt đẹp để làm điều này.Làm thế nào để khai báo một luồng địa phương tĩnh trong một mẫu

template<typename T> 
class my_class 
{ 
    struct some_type { }; 
    static __thread some_type * ptr; 
}; 

template<typename T> 
__thread typename my_class<T>::some_type * my_class<T>::ptr = 0; 

Cách khác để đạt được điều tương tự cũng không sao (nghĩa là sử dụng một chuỗi riêng biệt cục bộ cho mỗi mẫu).

Trả lời

1

Tôi tin rằng mã của bạn là chính xác, và sẽ dịch trong MSVC bằng cách thay thế __thread bởi __declspec(thread) (xem Thread Local Storage trên MSDN):

template<typename T> 
class my_class 
{ 
    struct some_type { }; 
    static __declspec(thread) some_type * ptr; 
}; 

template<typename T> 
__declspec(thread) typename my_class<T>::some_type * my_class<T>::ptr = 0; 
Các vấn đề liên quan