C++ is fun
public cpp v1 · immutabletemplate<class T>class ForeignKey{ public: ForeignKey() : m_obj(NULL), m_id(QVariant()) { } T *operator()(bool notNull = true) { if(!m_obj && !m_id.isNull()) m_obj = dynamic_cast<T *>(g_database->lookupItem(typeid(T), m_id.toInt())); assert(!notNull || m_obj); return m_obj; } void setId(QVariant id) { m_id = id; } QVariant id() { if(!m_obj) return QVariant(); return m_obj->id(); } private: T *m_obj; QVariant m_id;};