使用内联变量计算模板实例化

时间:2018-02-24 03:13:01

标签: global-variables c++17

我们想说我们要计算某个模板的模板实例的数量。

在C ++ 17中,我认为我可以这样做:

static inline size_t my_template_count = 0;

template <typename T>
struct my_template {
  static inline char count_me = []{ my_template_count++; return 0; }();

  // mention count_me in all functions.
};

我的问题是:   - 它会起作用吗?   - total_count上是否存在竞争条件?    (在加载DLL时读取,类似的东西)。

更新:@ n.m。正确指出 - 我必须引用变量。 我的usecase可以在所有构造函数,析构函数,静态方法等中包含(void)count_me。如果没有使用它们,可以忽略实例化。

1 个答案:

答案 0 :(得分:0)

与Sean Parent的讨论中出现了类似的问题。 他说:

  

不是线程安全的,因为不能保证在主线程cppreference

上发生延迟动态初始化