argc/argv parsing done in a C++ way

I'd say "the C++ way" but I'm not enough of a Blinkered Positivist about my own code to say that. For one thing, this class isn't suitable for parsing parameters for a compiler, but that's not something I was planning to build when I wrote it. If that changes, I'll make the necessary changes later.

I wrote this because I found getopt() parsing a little too stream-of-consciousness for most of what I do, with the prep-work at the wrong end (for me), not to mention not much use for some of the things I wanted and not cross platform nor C++-like enough.

I plan on doing some Qt and/or GTK programs along with command-line utilities and a couple of my ideas involve starting up windows that the user cannot resize. Because if I was using that tool, that's what I think I would want. For Qt (and I think GTK does this as well), there are a bunch of parameters that can be pass-through'd from the command-line into Qt for theming and stuff (including for window size), and I'd like my programs to be able to benefit from those options. But I don't want my programs (at least not all "shipping" versions) to "benefit" from options that I don't want. And perhaps there's some param'd behaviour that I want my programs to benefit from even if not supplied by the user. Hence the operator() that extracts a new argc/argv from the parameters parsed and modified.

Abstracting parameters into a C++ set, map and vector just made a lot of sense to me. And when I hit upon the approach of param-rewriting for Qt, the whole mechanism for extracting a new argc/argv after modifications for passing along to other components just made a lot of sense. Come to think of it, I suppose this could also be used for constructing args before passing to exec-like functions, too. I hadn't thought of that until now.

getopt style errors around "unknown options" can be detected by collecting all the settings and flag names and checking for any you don't recognize -- so my class won't just do what I want: what some getopt users might have expected to get for free is still available pretty cheaply.

"base_exception_ids.hxx" shows signs that parse_args was not the first class-file I used it with. Bingo. I have some other classes that I'm waiting until I have a platform-specific implementation for Windows available, so that I can fully put it to bed in my own workspace before pushing it up here, and those other "slots" are for that. I don't know if this is the best way to manage this difference between my work and what I share but it seems right for now.