Co jest nie tak z C++

Czasami mam wrażenie, że podczas rozwoju C++ coś poszło nie tak i język z wersji na wersję stał się nieczytelnym potworkiem, któremu coraz bliżej do Perla z czytelnością. Pomijając wskaźniki i zarządzanie pamięcią, spójrzmy na taki przykład: lista (wskaźników) funkcji, które mają być wywołane po podaniu określonych parametrów programu, z dodatkową listą pomocniczych parametrów i tekstem pomocy. Docelowo ma pozwolić na takie wywołanie aplikacji w następujący sposób:

./aplikacja --moje-id 1234 --email ja@domena.pl zamow pizze

Wspomniana lista ma trzymać polecenia typu “zamów pizze”, wymagane dla nich opcje (z –) oraz funkcje/metodę, która to obsłuży, oczywiście ze swoimi parametrami. Plus help text. W C++:

std::vector , void(*)(DApp *, std::vector) , std::vector , std::string > > command_mappings;
...
tuple, void (*)(DApp *, std::vector ), vector, string > p(vector{"zamow", "pizze"}, handler, vector{"moje-id", "email"}, "Zamawia pizze na niby");
command_mappings.push_back(p);

Wiem, można to przerobić na klasę/strukturę i będzie miejscami czytelniej. Wiem też, że można użyć gotowych struktur do obsłużenia tego, ale wyszło jak wyszło.

W Pythonie:

command_mappings = []
...
command_mappings.append(['zamow', 'pizze'], handler, ["moje-id", "email"], "Zamawia pizze na niby")

Może to trochę jak porówninie Elektrycznego Malucha z Fordem Escortem. Niby lata produkcji te same i oba mają strefę zgniotu kończącą się na silniku, ale jednak technologia i przeznaczenie inne. W pythonie, jak długo programuje, takie kwiatki nie wychodziły w miarę rozwijania kodu, nawet po latach. Kod zawsze wyglądał dość czytelnie i działał wolno. W C++ na odwrót 🙂 A może po prostu PEBKAC.

Wesołych Świąt!