Yes, I'm assuming static data so knowing where free space is would not be an issue.
A "variable" could use offsetof() to determine it's location in the struct and therefore the XM, but this approach would need functions for the various variable types and I don't know how you would differentiate between variables of the same type.
It would get very messy I think unless a C++ guru can advise otherwise.
Certainly an array of same types would be a lot easier.
And of course if you can fit the struct in internal RAM there's little point in having the external RAM in the first place