[LLVMdev] Small dyn_cast embellishment
Vladimir Prus
ghost at cs.msu.su
Thu Jun 17 04:01:01 PDT 2004
It appears that LLVM has quite a number of dyn_casts (which I find quite
natural) The suggested idiom:
if (ConstantExpr* ce = dyn_cast<ConstantExpr>(*j)) {
}
is fine, and IIRC even used in TC++PL, but it occured to me that we can do
even better:
if (dyn_caster<ConstantExpr> ce = *j) {
}
where dyn_caster is defined like this:
template<class T>
class dyn_caster
{
public:
template<class T2>
dyn_caster(T2& t)
: m_ptr(dyn_cast<T>(t))
{}
T& operator*() const { return *m_ptr; }
T* operator->() const { return m_ptr; }
operator void*() const { return m_ptr; }
private:
T* m_ptr;
};
This allows to type the type name only once, not twice. I'm not sure if this
good idea yet, but though I'd just throw it in, in case anybody will be
interested.
- Volodya
More information about the llvm-dev
mailing list