Chiedevo perché quella classe mi ricorda parecchio std::array<> fornito con VC++ 2010 o boost::array<> per cui potevi fare semplicemente (tralasciando il namespace per chiarezza):
codice:
typedef array<float,4> Float4;
Float4 f4a = { 1.0,2.3, 4.7,5.57};
Float4 f4b = { 13.01,2.7, 2.7,4.7};
cout << ( f4a == f4b ) << endl;
// etc.
In ogni caso non è quello il tuo problema, ma aver messo la definizione delle funzioni in un file .cpp invece che nel file header (e senza lo specificatore inline).
Per inciso: se vuoi mantenere le funzioni in un file cpp è possibile ma solo se espliciti i parametri.
codice:
template<>
bool CVar<float, 4>::operator== (const CVar& rhs)
{
return memcmp(mVar, CVar.mVar, 4*sizeof(float)) == 0;
}
però se cambi il tipo o la dimensione sei fregato.