Me gustaría agregar un poco de azúcar sintáctico a una clase al sobrecargar() como método getter. Sin embargo, el método getter toma un argumento de plantilla sin tipo. Consideremos un caso de prueba sencilla:¿Puedo pasar un argumento de plantilla sin tipo a un operador sobrecargado?
#include <iostream>
class Foo
{
public:
template <int i> void get()
{
std::cout << "called get() with " << i << std::endl;
}
template <int i> void operator()()
{
std::cout << "called overloaded() with " << i << std::endl;
}
};
int main()
{
Foo foo;
foo.get<1>();
foo.get<2>();
foo<3>(); // error: no match for ‘operator<’ in ‘foo < 3’
return 0;
}
Esto compila y se ejecuta como se espera si foo<3>();
esté comentada. ¿La sintaxis de C++ es compatible con lo que estoy tratando de hacer, o debería simplemente darme por vencido y mantener un método determinado para el getter?
No puedo probarlo ahora pero estoy seguro de que la única forma es 'foo.operator() <3>()', lo que probablemente anule el propósito. – PlasmaHH