繁体   English   中英

在模板类方法中,如何在共享库和主程序中使静态变量具有相同的初始化值?

[英]How to make static variable have the same initialization value in shared library and in main program, in a templated class method?

我创建了一个TypeManager类,该类允许我为给定的类类型创建一个ID。 这是使该方法成为可能的方法的最简单版本:

template<typename T>
int64_t getTypeId() {
    static int64_t type = typeCounter++;
    return type;
}

我的主程序使用该类,并且还使用多个共享库。 问题在于,当存在差异库时,该方法为每个相同的类类型创建差异ID。

如何在不对每个共享库使用不同ID的情况下进行这项工作? 有没有静态解决方案吗? 也许我可以使用编译标志来使它起作用?

提前致谢。

创建一个共享库。 它维护了从错误类型名称到索引的映射。

将此int64_t get_type_integer( std::type_index ) 导出它,使其成为线程安全的,等等。

不要这样

而是打电话

template<typename T>
int64_t getTypeId() {
  static int64_t type = details::get_type_integer(typeid(T));
  return type;
}

现在每个都具有一种类型,它使用魔术静态变量进行访问/初始化; get type integer每个.so每个类型仅被调用一次。 因此,其中的代码可以安全而不是超快速地编写。

直接使用名称,而不要使用type_index ,因为在许多系统中,两个中的相同类型可以被视为不同的类型,但是可以具有相同的类型错误名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM