Portál AbcLinuxu, 12. května 2025 07:07

Dotaz: Makra v C++

Wan-To avatar 29.6.2006 14:54 Wan-To | skóre: 16 | blog: WanBlog | Čelákovice
Makra v C++
Přečteno: 1215×
Odpovědět | Admin
Při psaní jedné cvičební C++/Qt4 aplikace jsem narazil na problém s makry.

Mám formulář, ve kterém je vždy QLabel a hned vedle QLineEdit. V labelu je napsané, co se má vložit do pole; však to znáte, je to úplně všude.

V definici třídy mám vždy dvojici členských proměnných, např:
QLabel * lName; QLineEdit * eName;
QLabel * lNick; QLineEdit * eNick;
Části za znaky 'l' a 'e' jsou vždy stejné.

Napadlo mne, že si trochu zjednoduším práci makrem. Místo QLabel * lName; QLineEdit * eName; bych napsal INPUT(Name).

Vymyslel jsem toto makro, které podle mého očekávání nefunguje :-)
#define INPUT(X) QLabel * lX; QLineEdit * eX;
Místo toho, aby X nahradilo nějakou hodnotou, pořád vytváří proměnné lX a eX. Jenže INPUT(Name) má vytvořit lName a eName.

Nemáte nějaký nápad, jak tento problém vyřešit? Tedy pokud vyřešit jde.

Díky za všechny nápady a řešení.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

29.6.2006 15:08 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Makra v C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tohle by mělo fungovat:
  #define INPUT(X) QLabel* l##X; QLineEdit* e##X;
29.6.2006 15:12 tfrais | skóre: 6
Rozbalit Rozbalit vše Re: Makra v C++
Ano, také si myslím. Jinak viz
http://www.fi.muni.cz/usr/jkucera/pb071/sl4.htm
a odstavec "Makrooperátory # a ##".
Wan-To avatar 29.6.2006 15:35 Wan-To | skóre: 16 | blog: WanBlog | Čelákovice
Rozbalit Rozbalit vše Re: Makra v C++
Funguje to krásně, díky moc!
29.6.2006 15:15 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Makra v C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
Případně by bylo možné udělat si pomocnou třídu QLabeledEdit, možná by se tím dalo ušetřit i víc psaní.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.