Подумав немного об этом, я думаю, что это был бы осуществимый подход (примечание: это просто псевдокод):
UniqueId(Type) = Type.stringof ~ MemberIds!(Type.tupleof)
UniqueId(Type) if( Type is builtin ) = Type.stringof
MemberIds(M, Ms...) = "," ~ UniqueId!(typeof(M))
~ "@" ~ ToString!(M.offsetof)
~ ":" ~ M.stringof
~ MemberIds!(Ms)
То есть создайте уникальный идентификатор из имени типа (вам может потребоваться отрубить модуль и пакет, не уверен), а также идентификатор каждого члена, смещение и имя.
В зависимости от того, что именно вы хотите, вы можете удалить имя участника.