Can you use UVM pack/unpack without having the UVM field macros?

If the members of a transaction class are not using UVM field macros, can you still use the functions do_pack( uvm_packer packer) and do_unpack(uvm_packer packer) ?

In reply to DVCoder:

Yes, that is the preferred way of doing it. All of the do_*() methods can be used without needed to use the field macros. This paper shows how to implement them.

In reply to dave_59:

Is there any papers/articles on examples using the uvm_packer methods? I haven’t seen examples where you would use the pack/unpack methods then use get_bits to get the packed bitstream.