Buenassssss.
A ver, tengo un Poltergeist del quince.
template<typename T>
class SInputCardCreator310Envelope :
public T
{...};
class SInputOutputCardCreator310Envelope :public SInputCardCreator310Envelope<SInputOutputCardDevice>
{...};
class SInputOutputCardDevice : public SInputOutputDevice
{...}; //Una jerarquía más o menos larga
template<typename T>
SInputCardCreator310Envelope<T>::SInputCardCreator310Envelope() : T(),
m_cardReader(std::make_unique<Creator310CardReader>())
{
}
class Creator310CardReader : public Creator310SmartCardReader
{...}; //Otra jerarquía más o menos compleja.
Yo, a partir de un puntero global de
SInputOutputCardCreator310Envelope,
g_InputOutputCardDevice , hago un cast a
Creator310CardReader , que es el objeto que yo quiero y deseo:
m_cardReader = reinterpret_cast<Creator310SmartCardReader*>(g_InputOutputCardDevice);
Si llamo a un método de
m_cardReader que no reciba parámetros, funciona, si llamo a un método al que le tengo que pasar algún parámetro, me salta un método de la clase base
SInputOutputDevice...
Y estoy loco porque en ensamblador, el call <address> es el call al address del método que quiero, no al de la clase base de la otra jerarquía. Además, es un método que está ahí y que no tiene nada que ver con lo que estoy haciendo.
La idea de esto es tener por un lado una clase moderna y chachi pirulis para trabajar con mi nuevo código, y luego dejar como está el "Envelope" para que trabaje con el código viejo. De hecho, el "Envelope" mapea las llamadas viejas de
SInputOutputCardDevice a las nuevas de
Creator310CardReader...
Y aquí estoy, saltándome una llamada a método que no sé de dónde me viene...
¿Alguna idea?
El código completo no os lo puedo pegar porque son unos 4.5M de líneas y luego mi jefe me mataría (a mi y a vosotros) :-)