Dans l'un des projets sur lequel je travaille, je vais voir ce code
struct Base {
virtual ~Base() { }
};
struct ClassX {
bool isHoldingDerivedObj() const {
return typeid(1 ? *m_basePtr : *m_basePtr) == typeid(Derived);
}
Base *m_basePtr;
};
Je n'ai jamais vu typeid
utilisé comme ça. Pourquoi faut-il faire bizarre de danse avec ?:
, au lieu de simplement faire typeid(*m_basePtr)
? Pourrait-il y avoir une raison? Base
est un polymorphe de la classe (avec un destructeur virtuel).
EDIT: À un autre endroit du présent code, je le vois et il semble être un équivalent de "superflu"
template<typename T> T &nonnull(T &t) { return t; }
struct ClassY {
bool isHoldingDerivedObj() const {
return typeid(nonnull(*m_basePtr)) == typeid(Derived);
}
Base *m_basePtr;
};