Este es un caso de prueba mínima de un código que realmente tengo. Se produce un error cuando se trata de evaluar a.getResult<B>()
:función de plantilla no juegan bien con la función de miembro de la plantilla de clase
test.cpp: In function 'void printStuff(const A&)':
test.cpp:6: error: expected primary-expression before '>' token
test.cpp:6: error: expected primary-expression before ')' token
El código es:
#include <iostream>
template< class A, class B>
void printStuff(const A& a)
{
size_t value = a.getResult<B>();
std::cout << value << std::endl;
}
struct Firstclass {
template< class X >
size_t getResult() const {
X someInstance;
return sizeof(someInstance);
}
};
int main(int, char**) {
Firstclass foo;
printStuff<Firstclass, short int>(foo);
printStuff<Firstclass, double>(foo);
std::cout << foo.getResult<double>() << std::endl;
return 0;
}
Si comento a cabo la función printStuff
y donde se llama, la llamada foo.getResult<double>()
compila bien y hace lo que se espera.
Alguna idea de lo que está pasando? He estado trabajando con código extensivamente templado por un tiempo y nunca he encontrado algo como esto.
Wow, acabo cuando pensaba que sabía todo lo que había que saber sobre C++ ... –
Gracias! Esa es la sintaxis más extraña que he visto en C++. –
De alguna manera, VC++ es bastante indulgente al respecto (es decir, a menudo puedes salirte con la tuya), ¡pero definitivamente no es así! –