我现在找到了一个令人满意的解决方案,它并非完全没有预处理器的魔力,但至少没有宏或代码复制。
也许这对某人有帮助:
#ifdef __EMSCRIPTEN__
#include <GLES3/gl3.h>
class GuiWrapper
#else
#include <QOpenGLFunctions>
class GuiWrapper: protected QOpenGLFunctions
#endif
{
void drawStuff(void); // cpp decides between free and member-functions
};
#include <guiwrapper.h>
void someFunc(void){
GuiWrapper gui;
gui.drawStuff(); // calls <GLES3/gl3.h>
}
glwidget.cpp:
#include <guiwrapper.h>
#include <QOpenGLWidget>
class GLWidget: public QOpenGLWidget, private GuiWrapper{
public:
void paintGL(void){
drawStuff(); // calls <QOpenGLFunctions>
}
};