mardi 10 mars 2015

C++ template struct has no member named error

The only way I can get this to compile without issuing a warning on no member a when T==B and so on for T==A is to reinterpret_cast within the if statement blocks and access the non-shared members via a pointer. Is there no way to get around this or hint to the compiler otherwise?


This is gcc 4.8.x



enum Type { A, B};

template<Type T> struct S { };
template<> struct S<A> { int x; int a; };
template<> struct S<B> { int y; int x; int b; };

template<Type T> static void foo(int x)
{
// lots of code

S<T> s;
s.x = someCall();

if (T == A)
{
s.a = 1;
}
else if (T == B)
{
s.y = 2;
s.b = 3;
}

// a bunch of common code
}


Edit: I know about making a dedicated specific functions to handle the specifics but I was hoping to avoid extra boilerplate code.


Aucun commentaire:

Enregistrer un commentaire