Is it possible to create a struct with dispatcher built in?

That is how it’s done. I wouldn’t overcomplicate the struct because it’s just a “dumb” container to hold data, you usually do implementation on whatever uses that struct for its own purposes. So a component tracking health, magic and stamina points would implement a setter and an event to execute when the setter is called. The struct is not aware of anything, it’s just used to hold stuff for the component. Specific logic doesn’t rlly belong in the struct.

Technically you could run over all struct properties on tick and check if any value changed (think of widget property bindings) but obviously that sucks for performance. There is no generic “if changed then do” for all data types.