Proste makro - dodanie stringa do nazwy typu

0

Cześć, mam taką instrukcję:

MyTypePtr((MyType *)ent.get())->doSth();

I chciałem to przerobić na makro (bez wywołania metody). Ale nie mogę sobie z tym poradzić. Chodzi o to, żeby przekazać "MyType" i "ent" i uzyskać właśnie to. Próbowałem tak:

#define CAST_ENT_PTR(typeName, obj) #typeName#Ptr((typeName *)obj.get())

Ale czepia mi się hashów. Jakieś pomysły?

0

Łączenie nazw w makrach odbywa się za pomocą ##. Ale przyznam, że nie wiem co chcesz tutaj osiągnąć, cała ta konstrukcja nie wygląda zbyt sensownie. W każdym razie:

#define CAST_ENT_PTR(typeName, obj) typeName##Ptr((typeName *)obj.get())

http://melpon.org/wandbox/permlink/K9xe1cMd08eS5Q5W

Przy okazji - ta nazwa nie jest zgodna z działaniem tego makra. Nie tylko rzutujesz, ale też inicjalizujesz obiekt typu typeNamePtr.

2

makra to historyczne przekleństwo.
Opisz szerzej problem.
Może powinieneś użyć takiej konstrukcji:

MyTypePtr(static_cast<MyType *>(ent.get()))->doSth();
0
MyTypePtr((MyType *)ent.get())->doSth();

To jest jakiś WTF.

MyTypePtr ent;
...
ent->doSth();

uprość kod, zamiast opakowywać potworka w makro i udawać że jest pięknie.

0

od tego są chyba interface'y

1 użytkowników online, w tym zalogowanych: 0, gości: 1