suponga que tiene el códigoerror "parámetro de plantilla no válido" en Visual Studio, pero no GCC
template <template<class> class BaseType>
class EST16
: public BaseType<int>
{
public:
EST16(double d)
{
}
};
template <class T>
class SCEST
{
T y;
};
typedef EST16<SCEST> EST16_SC;
class Child
: public EST16_SC
{
public:
Child()
: EST16_SC(1.0)
{
}
};
class NotWorkingChild
: public EST16<SCEST>
{
public:
NotWorkingChild()
: EST16<SCEST>(1.0)
{
}
};
TEST(TemplateTest, TestInstantiate)
{
Child child;
NotWorkingChild notWorkingChild;
}
Infantil y NotWorkingChild sólo se diferencian por el typedef. En tanto GCC compile, en Visual Studio el constructor de NotWorkingChild produce el siguiente error:
2>..\..\..\src\itenav\test\SCKFErrorStateTest.cpp(43) : error C3200: 'SCEST<T>' : invalid template argument for template parameter 'BaseType', expected a class template
2> with
2> [
2> T=int
2> ]
Puede explicar por qué esto es así? ¿Hay una solución portátil mejor que el typedef?
Gracias!
¿Ha escrito algún código que realmente ejemplifique y use las clases de plantilla? Con eso quiero decir en, por ejemplo, 'main'. Una cosa que podría estar sucediendo es que VCC prueba la creación de instancias al ver el 'typedef', mientras que GCC no se molesta hasta que realmente se use una de sus clases secundarias. Si eso es cierto, entonces también obtendrías errores en GCC, tan pronto como escribas código que use una de las plantillas de clase hija. – phooji
Sí, lo hice. La macro TEST crea una prueba de Google que recibe llamadas de main(). – Philipp
Lo siento, la macro 'TEST' estaba justo después de mi límite de desplazamiento, así que me lo perdí. No estoy al 100% de por qué esto falla, pero he publicado un enfoque alternativo a continuación que debería ser más portátil entre los compiladores. También es más legible, en mi humilde opinión :) – phooji