如何在模板类中定义一个也是线程局部的静态成员变量?我想我已经想出如何在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;
实现相同功能的另一种方法也可以(即,每个模板实例使用一个不同的本地线程)。
答案 0 :(得分:1)
我相信您的代码是正确的,并且可以通过__thread
替换__declspec(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;