People always ignore one important factor: Hannibal's army wasnt a siege army his iberians and gauls despised ground work of sapping and general fortification works...
So he was almost like a mongol army in M2TW undefeated at open ground while weak at sieging...
Thats why Alexander was a faaar superior general...he would have burned Rome to the ground...