Nie wiem czy jest sens, taka/takie klasy to spory i chyba niepotrzebny narzut na flash, względem możliwości zapisania tego jako proste makra preprocesora.
O ile, być może komfort użytkowania tego jest większy, o tyle przy procesorach 8bitowych avr z takim podejściem (mówiąc ogólnikowo) szybko sobie zapchasz niepotrzebnie pamięć.
Jak już chcesz robić coś podobnego, to raczej polecałbym chociaż bit rejestru przekazywać jako argument, bo tych klas masz w chwili obecnej pierdyliard

Nie wyobrażam sobie ewentualnych zmian w takich klasach, gdy masz ich z 20.
Możesz spróbować zastosować też template'y. Kiedyś widziałem gdzieś fajny kod pod avry, zrobiony właśnie z wykorzystaniem template'ów. Sprytnie załatwiał w ramach jednej klasy taką obsługę portów jaką Ty próbujesz zrobić.
Niestety, przy programowaniu procesorów bez systemów operacyjnych musisz wybierać często pomiędzy komfortem i optymalnością danego rozwiązania.
Sam zobaczysz, że w miarę większych projektów, komfort pisania będzie miał drugorzędne znacznie
