Das entspricht gewissermaßen schon einem Template und könnte auch den Weg darstellen, der zukünftig mit Templates gegangen werden könnte.
Ziel dieser Seite ist allerdings lokal Anweisungen abzukürzen. Folgendes Problem:
HBITMAP bmNew = reinterpret_cast< HBITMAP >( Dicad::Exports::imgGetBitmap( false /* small icons */, DkImg::Icon::New )); HBITMAP bmOpen = reinterpret_cast< HBITMAP >( Dicad::Exports::imgGetBitmap( false /* small icons */, DkImg::Icon::Open )); HBITMAP bmSave = reinterpret_cast< HBITMAP >( Dicad::Exports::imgGetBitmap( false /* small icons */, DkImg::Icon::Save )); HBITMAP bmCalc = reinterpret_cast< HBITMAP >( Dicad::Exports::imgGetBitmap( false /* small icons */, DkImg::Icon::CalculateVolume )); HBITMAP bmCalcAW = reinterpret_cast< HBITMAP >( Dicad::Exports::imgGetBitmap( false /* small icons */, DkImg::Icon::CalculateVolume )); HBITMAP bmCalcA = reinterpret_cast< HBITMAP >( Dicad::Exports::imgGetBitmap( false /* small icons */, DkImg::Icon::CalculateVolume ));
Viel Text, wenig Inhalt. Lösung in C: ein Makro:
#define GRABBITMAP( id ) reinterpret_cast< HBITMAP >( Dicad::Exports::imgGetBitmap( false /* small icons */, id )); HBITMAP bmNew = GRABBITMAP( DkImg::Icon::New ); HBITMAP bmOpen = GRABBITMAP( DkImg::Icon::Open ); HBITMAP bmSave = GRABBITMAP( DkImg::Icon::Save ); HBITMAP bmCalc = GRABBITMAP( DkImg::Icon::CalculateVolume ); HBITMAP bmCalcAW = GRABBITMAP( DkImg::Icon::CalculateVolume ); HBITMAP bmCalcA = GRABBITMAP( DkImg::Icon::CalculateVolume );
Makros haben die Eigenart, dass sie nicht abhängig vom Typen sind und das kann teilweise ja auch sehr nützlich sein. Deswegen könnte man Funktionen beschreiben, die sich bzgl. des Typens auch nicht so exakt festlegen wollen.
grapbitmap is code( auto id ) := reinterpret_cast< HBITMAP >( Dicad::Exports::imgGetBitmap( false /* small icons */, id ));
Der Typ von id wird beim Aufruf festgelegt. Gibt es eine passende Funktion imgGetBitmap, kompiliert das, falls nicht, dann gibt es eine Fehlermeldung. Der Rückgabetyp muss eindeutig sein, also entweder void oder für alle Pfade identisch.