title: C++ best way to define cross-file constants
body: <p>I am working on a game and have an interesting question. I have some game-wide constant values that I want to implement in one file. Right now I have something like this:</p>
  
  <p>constants.cpp</p>
  
  <pre><code>extern const int BEGINNING_HEALTH = 10;
  extern const int BEGINNING_MANA = 5;
  </code></pre>
  
  <p>constants.hpp</p>
  
  <pre><code>extern const int BEGINNING_HEALTH;
  extern const int BEGINNING_MANA;
  </code></pre>
  
  <p>And then files just #include "constants.hpp"
  This was working great, until I needed to use one of the constants as a template parameter, because externally-linked constants are not valid template parameters.
  So my question is, what is the best way to implement these constants? I am afraid that simply putting the constants in a header file will cause them to be defined in each translation unit. And I don't want to use macros.</p>
  
  <p>Thanks</p>