如何在模板中声明线程本地静态
如何在模板类中定义一个也是线程局部的静态成员变量?我想我已经弄清楚如何在 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;
实现相同目标的另一种方法也可以(即,每个模板实例使用不同的本地线程)。
How can I define a static member variable that is also thread local inside a template class? I think I've figured out how to do it in GCC, but would like to confirm this will work correctly in terms of linking, initialization and resolution. Also the translation to another compiler would be helpful (like MSVC) so I can get a nice macro to do this.
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;
An alternate way to achieve the same thing would also be okay (that is, to use a distinct thread local per template instance).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我相信您的代码是正确的,并且可以通过用
__declspec(thread)
替换__thread
来在 MSVC 中进行翻译(请参阅 线程本地存储):I believe your code is correct, and would translate in MSVC by replacing
__thread
by__declspec(thread)
(see Thread Local Storage on MSDN) :