I currently have an IoT gadget that has different Display subclasses depending on what hardware I am compiling for. There is a base class called Display and have various subclasses like D_oled32 and D_oled64. At compile time I set a build flag via #define so that when I instantiate the the Display object it will pick the specified subclass. The way I have it now does work but VSCode is confused by it and I don't know if there is a more elegant way of doing it. Currently I do this :
#if defined(MAX7219)
#include "Displays/D_max7219.h"
#define DISPLAY_CLASS D_max7219
#elif defined(EPD)
#include "Displays/epdfeather.h"
#define DISPLAY_CLASS D_epdfeather
#elif defined(OLED32)
#include "Displays/D_oledy32.h"
#define DISPLAY_CLASS D_oledy32
#elif defined(OLED64)
#include "Displays/D_oledy64.h"
#define DISPLAY_CLASS D_oledy64
#elif defined(CHA)
#include "Displays/ledfeather.h"
#define DISPLAY_CLASS D_ledfeather
#endif
Display *display;
Then in setup I do : olehana spain
// setup the display object
// display hardware is specified at compile time
display = new DISPLAY_CLASS(config); // DISPLAY_CLASS is SET in a #define at the top of this file