没有强制转换的dynamic_cast类型检查功能?

rws*_*wst 1 c++ dynamic-cast rtti

关于这个问题有很多问题,但似乎没有人专门解决这个问题:鉴于代码库不允许用虚函数解决所有问题(正如你通常会做的那样),有一个函数:

/** Check if obj is a T, including base classes. */
template <class T>
inline bool is_a(const basic &obj)
{
    return dynamic_cast<const T *>(&obj) != 0;
}
Run Code Online (Sandbox Code Playgroud)

但显然演员即使没必要也会制作.如何编写此函数以仅检查,即使用dynamic_cast功能而不进行实际演员?假设用虚函数替换对此函数的调用,或为此目的实现穷人的RTTI是不切实际的.

编辑:在标题上添加问号,强调对可能性的怀疑

cel*_*chk 5

请注意,实际的强制转换只是向指针添加偏移量.还需要确定该偏移所需的任何步骤来确定是否可以进行转换.一个好的优化器无论如何都会优化最终的添加,因为向一个非空指针添加一个常量,除了空测试之外没有使用它没有效果.

因此,任何不改善设计的替代品都不会产生可测量的影响; 如果由于某种原因无法实现更好的设计,那么正确的替换就是保持功能不变.