2010-11-20 2 views
5

Как определить статическую переменную-член, которая также является локальной нитью внутри класса шаблона? Я думаю, что я понял, как это сделать в GCC, но хотел бы подтвердить, что это будет работать правильно с точки зрения связывания, инициализации и разрешения. Также был бы полезен перевод на другой компилятор (например, MSVC), поэтому я могу получить хороший макрос для этого.Как объявить поток локального статического в шаблоне

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; 

Альтернативный способ добиться того же, что было бы также хорошо (то есть, использовать отдельную нить локальную каждый экземпляр шаблона).

ответ

1

Я считаю, что ваш код правильно, и будет переводить в MSVC, заменив __thread на __declspec(thread) (см Thread Local Storage на 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; 
Смежные вопросы