Właśnie rozpocząłem swoją przygodę jako programista C ++, a ostatnio badam temat zwany metaprogramowaniem. Do tej pory przejrzałem wiele informacji na ten temat i mam kilka pytań.
Zastosowanie Refleksji w c ++: Czy to możliwe? Zgodnie z moim rozumieniem refleksja jest techniką metaprogramowania, która ma zdolność manipulowania stanem programu, a jej manipulacją może być introspekcja lub introcesja.
Jaka jest różnica między architekturą refleksyjną a architekturą meta-poziomową? W jakiej kategorii mieści się architektura metaprogramowania?
Metaprogramowanie ma dwa poziomy: poziom meta i poziom podstawowy. W moim rozumieniu program obiektowy lub badany system to poziom podstawowy, a program meta, który będzie działał w badanym systemie, to poziom meta. Mam rację?
Pomóż mi również, udzielając wskazówek dotyczących pracy nad metaprogramowaniem szablonów w C ++.
Czy możesz zasugerować mi kilka praktycznych przykładów, których mogę szukać, aby poznać tę technikę programowania?
Odpowiedzi:
Metaprogramowanie oznacza po prostu, że masz środki do pisania kodu, który zapisuje inny kod (w szerokim znaczeniu). C ++ robi to za pośrednictwem mechanizmu szablonów, który jest w zasadzie bezpiecznym językiem makr. Jest całkowicie możliwe, aby zastosować krok rozwinięcia szablonu, a wynik będzie prawidłowym kodem C ++ bez szablonów.
Refleksja to zdolność języka programowania i / lub środowiska wykonawczego do sprawdzania (i często modyfikowania) własnych elementów języka w czasie wykonywania. Zazwyczaj języki odblaskowe oferują struktury danych, które reprezentują elementy języka, takie jak klasy, metody, zmienne, parametry itp., A także procedury lub klasy do ich sprawdzania, modyfikowania i tworzenia. Możliwość modyfikacji sprawia, że odbicie jest rodzajem metaprogramowania, ponieważ pozwala pisać kod, który generuje inny kod.
Inne przykłady metaprogramowania to generatory kodu, samomodyfikujące się pliki binarne (choć dziś nie są one tak popularne jak dwie dekady temu), makra C; można argumentować, że curry i podobne techniki programowania funkcjonalnego są również rodzajem metaprogramowania.
źródło
2-3. Nie wiem - poczekaj na kolejną odpowiedź, która pomoże w tym :-)
Programowanie meta przy użyciu szablonów C ++ jest bardzo wydajne, ale także złożone. Rozszerzenie szablonu wymaga funkcjonalnego stylu programowania, a nie programowania imperatywnego używanego przez C ++. Jeśli nie masz wcześniejszego doświadczenia z programowaniem funkcjonalnym, poleciłbym ci objazd i nauczenie się podstawowych zasad lisp, haskell lub schematu.
źródło