Ciao ... Se ho capito bene il tuo problema, potresti fare una cosa del genere:
codice:
struct ConstantData
{
   ConstantData( int inHP, int inMP, int speed ) : initialHP(inHP), initialMP(inMP), speed(speed) {}
   // Qui tutte le costanti condivise
   const int initialHP;
   const int initialMP;
   const int speed;
};


class Unit
{
   // Qui tutte le variabili condivise
   int m_currHP;
   int m_currMP;
protected:
   // Il costruttore deve inizializzare le variabili secondo i valori delle costanti
   Unit( const ConstantData& init ) : currHP(init.m_initialHP), currMP(init.m_initialMP) {}
   virtual ~Base() {}
};

class Lion : public Unit
{
   static ConstantData initialData;
public:
   Lion( ) : Unit( initialData ) {}
};

class Snake : public Unit
{
   static ConstData initialData;
   Snake( ) : Unit( initialData ) {}
};
Quindi l' inizializzazione delle varie costanti condivise:
codice:
ConstantData Lion::initialData( 200,150,20 );
ConstantData Snake::initialData( 100,50,13 );