HomeBlogMagic

Klassentyp einer Variable erhalten

Für Makros ist es manchmal nützlich die Klasse als Typ von einem Pointer zu bekommen. Seit dem std11, welches ich persönlich als minimal Anforderung sehe, ist das möglich. Dies kann z.B. über folgendes Makro erreicht werden:

#define CLASSOFP(POINTER) std::remove_pointer<decltype(POINTER)>::type

Ein kleines Beispiel, welches auch ein Unity-Test aus meinem privaten Framework ist, mit diesem Makro:

int16 i=100;
CcString* pString;
CcString sConverted = CLASSOFP(pString)::fromNumber(i);

Wie man an dem Beispiel erkenn kann, wird aus einem beliebigem String-Pointer, auch wenn dieser gar keinen gültigen wert hat, der Klassen-Typ ermittelt. Dadurch ist es möglich auf die statische Funktion der Klasse zuzugreifen.

Trouble shooting

Wenn remove_pointer nicht bekannt ist, dann fehlt folgender include:

#include <utility>
Permalink: https://adirmeier.de/Blog/ID_360
Tags: Blog, C/C++, Macro, std11von am 2021-02-01