Как вы используете препроцессор для создания кроссплатформенной библиотеки?

Я хочу использовать тот же подход #ifdef , который используется в WxWidgets, SDL и т. Д. Единственная проблема в том, что я не знаю, как его использовать.

Допустим, я хочу создать класс, который рисует прямоугольник. Я хочу, чтобы он использовал cairo на платформах X11 (например, linux) и GDI на платформах win32:

class graphics
{
void drawRect(int x, int y, int w, int h)
{
/*if on win32*/
HDC myHdc = ::BeginPaint(myHwnd,&mypstr);
::Rectangle(myHdc,x,y,w,h); 
::EndPaint(myHwnd,&mypstr);

/*if on x11*/
cairo_surface_t* s = cairo_xlib_surface_create(/* args */); 
cairo_t* c = cairo_create(s);
cairo_rectangle(c,x,y,w,h);
// etc. etc.
}
};

Как мне использовать #ifdef или что-то еще для этого?

5
задан Brian Tompsett - 汤莱恩 23 June 2016 в 18:32
поделиться