代码之家  ›  专栏  ›  技术社区  ›  Migsi

static_cast之后有没有方法进行类型安全检查?

  •  0
  • Migsi  · 技术社区  · 8 年前

    接口限制迫使我强制转换 MyObject* 变成 void* 使用static_cast。在以后的接口调用中获取此指针时,我必须从 空洞* 我的对象* ,因为dynamic_cast在这种情况下不起作用(已解释 here ).

    然而,我想执行一个类型安全检查,以确保在其他人更改代码的部分时不会发生奇怪的事情。如果在这种情况下可以进行任何检查,哪一种检查是最好/最方便的?

    1 回复  |  直到 7 年前
        1
  •  1
  •   MSalters    8 年前

    不,一旦你击中 void* 这完全取决于代码如何正确地进行强制转换。根本原因是 空洞* 从理论上讲,你可以指出几乎任何东西:a char , int , std::string , std::complex<double> , std::map<int, int>::iterator 当然 MyObject .

    你将面临的问题是,只有在 空洞* 实际上指向 我的对象 ,但在这种情况下,演员阵容是不必要的。

    非铸造解决方案是保持 std::unordered_set<void*> 其中 空洞* 您是通过铸造创建的 MyObject* ,通过删除过期指针 ~MyObject() ,并在铸造前检查该组。