Gamla hundar och ett nytt C++

Jag har det lite svårt med C++ just nu.

Mycket av det pågående arbetet på språkets library-scen (främst Boost, då) är baserat på vad man kallar template meta-programming. Jag har kämpat lite med att förstå det, eftersom många betraktar det som den starkast lysande stjärnan på framtidens himmel av C++-tekniker.

Jag har meckat med Boost, läst Josuttis/Vandevoordes C++ Templates, Alexandrescus Modern C++ Design och en hel del annat. Mycket av det är otroligt imponerande, åtminstone för mig som har en brokig bakgrund i relativt naiv traditionell objektorientering med arv och virtual dispatch.

Det som tilltalar mig med mer traditionell OO-design är att den fostrar någon sorts människotillvändhet i koden. Riktigt väldesignad kod kan nästan läsas av en lekman som känner till systemets terminologi.

Moderna C++-tekniker, i jämförelse, kan närmast beskrivas som omänskliga.

De tekniker som används för att uttrycka likheter och variationer tar inte stöd bara mot befintliga features i språket, utan uppfinner egna konstruktioner på nyskapande sätt. Detta ger naturligtvis en rad fördelar rent tekniskt: komplexa uttryck kan utvärderas compile-time och man får stenhård typsäkerhet och ofta oöverträffad runtime-prestanda.

Men för läsaren lämnas i mitt tycke en del övrigt att önska.

Jag väljer att tillskriva detta min egen okunskap, åtminstone ett tag till, så jag ska försöka se om jag kan hitta en genomgående taxonomi över likhets- och variations-tekniker med modern C++.

Det vill säga, om jag till exempel intuitivt skulle vilja använda arv för att modellera ett basfall och ett antal variationer, hur gör jag då detta med moderna tekniker? Template-specialisering? Tag dispatching?

Man hisnar vid tanken.

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s