2010-11-20 14 views
5

मैं एक स्थैतिक सदस्य चर को कैसे परिभाषित कर सकता हूं जो टेम्पलेट क्लास के अंदर स्थानीय भी धागा है? मुझे लगता है कि मैंने यह पता लगाया है कि जीसीसी में इसे कैसे किया जाए, लेकिन यह पुष्टि करना चाहते हैं कि यह लिंकिंग, प्रारंभिकरण और संकल्प के संदर्भ में सही तरीके से काम करेगा। इसके अलावा किसी अन्य कंपाइलर का अनुवाद सहायक होगा (एमएसवीसी की तरह) ताकि मैं ऐसा करने के लिए एक अच्छा मैक्रो प्राप्त कर सकूं।टेम्पलेट में एक थ्रेड स्थानीय स्थैतिक घोषित कैसे करें

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

मेरा मानना ​​है कि आपका कोड सही है, और __declspec(thread) द्वारा __thread की जगह MSVC में अनुवाद होगा (MSDN पर Thread Local Storage देखें):

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; 
संबंधित मुद्दे