I know about the libxrandr library but reading out newly attached monitor/display information, like available resolutions, requires polling.
Is there a way, in a CPP program, to get informed about changes on attached displays without asking RandR every x seconds?
At least if you are using Gnome and Mutter you can listen to the dbus signals of Mutter.
Example of a dbus method in the same namespace:
Use a DBus viewer to find the signal you are looking for.
I don't know a solution for any other window manager