2010-11-20 36 views
5

Come posso definire una variabile membro statica che è anche thread locale all'interno di una classe template? Penso di aver capito come farlo in GCC, ma vorrei confermare che funzionerà correttamente in termini di collegamento, inizializzazione e risoluzione. Anche la traduzione in un altro compilatore sarebbe utile (come MSVC), quindi posso ottenere una bella macro per farlo.Come dichiarare un thread statico locale in un modello

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; 

Un metodo alternativo per ottenere la stessa cosa sarebbe anche male (cioè, di utilizzare un filo distinto locale per istanza template).

risposta

1

Credo che il vostro codice è corretto, e si tradurrebbe in MSVC sostituendo __thread da __declspec(thread) (vedi Thread Local Storage su 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; 
Problemi correlati