在 static_cast 之后执行类型安全检查的任何方法?

Any way to perform type safety check after static_cast?

接口限制迫使我使用 static_cast 将 MyObject* 转换为 void*。在以后的接口调用中取回此指针时,我必须执行另一个 static_cast 从 void*MyObject*,因为 dynamic_cast 在这种情况下不起作用(解释 here).

但是,我想执行类型安全检查,以确保如果其他人更改部分代码不会发生奇怪的事情。如果有任何检查可以在这种情况下执行,那么best/most哪个是方便的?

不,一旦您点击了 void*,就完全取决于代码来获得正确的转换。根本原因是你返回的 void* 理论上可以指向几乎任何东西:a char, int, std::string, std::complex<double>, std::map<int, int>::iterator 当然还有 MyObject

您将面临的问题是,只有当 void* 实际上指向 MyObject 时,您的转换才会起作用,但在那种情况下,转换并不是必需的。

non-casting 解决方法是保留您通过转换 MyObject* 创建的所有 void*std::unordered_set<void*>,通过 ~MyObject() 删除过期指针,以及在投射之前检查那个集合。