2010-11-20 23 views
5

Şablon sınıfı içinde yerel olarak işlenen statik üye değişkeni nasıl tanımlayabilirim? Sanırım GCC'de nasıl yapılacağını anladım, ancak bunun bağlantı, başlatma ve çözümleme açısından doğru bir şekilde çalışacağını doğrulamak isterim. Ayrıca başka bir derleyicinin çevirisi de (MSVC gibi) yardımcı olabilir, bu yüzden bunu yapmak için güzel bir makro alabilirim. Şablonda iş parçacığı yerel statik bildirme

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; 

alternatif bir yolu

(şablon örneği başına yerel ayrı iplik kullanmak, yani) aynı şey de iyi olacağını ulaşmak için.

cevap

1

I (MSDN üzerinde Thread Local Storage bakınız) kodunuzu doğru olduğunu ve __declspec(thread) tarafından __thread değiştirerek MSVC tercüme olurdu:

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; 
İlgili konular