我读到dynamic_cast<THECLASS>(THEVARIABLE)
如果您尝试将 THEVARIABLE 强制转换为 THECLASS(假设 THEVARIABLE 不是 THECLASS 的类而不是 THECLASS 的后代),它将返回 0。我听说 dynamic_cast 比较慢,因为它需要进行运行时检查。如果我为对象检查做了很多循环,dynamic_cast 会不会很慢(比如 100 个对象)?
我想知道我是否制作了一个静态类来进行类型检查,如下所示,它会更好(更快吗?)(如果有的话,请忽略语法错误):
class TYPECHECK {
public:
inline static bool isInt(int a) {
return true;
}
template<typename wrongtype>
inline static bool isInt(wrongtype a) {
return false;
}
[...]
private:
TYPECHECK();
};
int main() {
int a = 5;
char b = 'd';
TYPECHECK::isInt(a); //true
TYPECHECK::isInt(b); //false
return 0;
}
假设我为除了 int 之外的更复杂的类型做了这个。如果它在 for 循环中,这个类的实现会比 dynamic_cast(用于检查)更快吗?
提前致谢。
编辑
twsansbury 对于推荐和包括访问者模式的示例有一个很好的答案。