This can mistakenly be taken to the length of postponing optimisation till the end of a project. I have found slow versions of my software slowing testing and development as badly as a very slow compiler would. This is best achieved by recognising that points, edges and faces have different types. For example corners of a polygon are fenceposts to the edges, and therefore an explicit function to move from edge to one or other corner is needed. By contrast, use of an edge index as if it were the same thing as a point index does not generalise to polyhedra.
Switch statements tend to accumulate clutter.
If efficiency is an issue here, use inline functions, but make the conversion explicit. An example, a text 'cursor' is a fencepost object for it appears between characters. Changes Changes in code can be like rust. They can degrade a good clean structure. The 'changes' rules are aimed at controlling this effect.