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).