如何在模板中声明线程本地静态

发布于 2024-10-03 15:59:26 字数 410 浏览 1 评论 0原文

如何在模板类中定义一个也是线程局部的静态成员变量?我想我已经弄清楚如何在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

单调的奢华 2024-10-10 15:59:26

我相信您的代码是正确的,并且可以通过用 __declspec(thread) 替换 __thread 来在 MSVC 中进行翻译(请参阅 线程本地存储):

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;

I believe your code is correct, and would translate in MSVC by replacing __thread by __declspec(thread) (see Thread Local Storage on 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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文