These are chat archives for Makuna/NeoPixelBus
You partially understand the issue. If instead of templates you had options, then you would have to store flags for branches (speed, timing, etc) and also the code for branches adds up in size and running time (think inner loops with branches). But in nearly all use cases for this library, you would not use multiple instances. Where you would need multiple templates, you assume it takes up more code; but often the compiler can optimize the code use down where they are similar enough. While a dozen or so bytes doesn't seem like much, there are some target MCUs that don't have much more than this that my library can run on.
Not only is there no V-Table to dereference (these aren't Intel CPUs), there is no V-Table taking up RAM, as that is where it gets stored. I believe there is now a way to force it be stored in flash (code space), but this option is not used for Arduino. I believe the esp8266/esp32 people are looking into this right now.
My understanding now is that using and typedef are equivalent.