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

时间:2018-11-30 00:36:36

标签: c++ templates static shared-libraries

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

function validarMail(email){
    var caract = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
    return caract.test(email)    
}

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

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

谢谢。

1 个答案:

答案 0 :(得分:0)

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

将此称为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是因为在许多系统中,两个这样的相同类型可以被认为是不同的类型,但是可以具有相同的类型名称。