In alternativa, come già detto, basta utilizzare i template.

Constante -> const non significa che il valore è dato in tempo di compilazione.
Per avere un valore costante e conosciuto a compilazione si usa constexpr.
Ossia quando si dichiara una costante globale il const diventa automaticamente constexpr, quindi sarebbe più corretto scrivere [CODE] constexpr int MAXcaratteri = …; Per questo tipo di situazione si può utilizzare tranquillamente la metaprogrammazione (template).