Encuentro algo molesto en C++ y no sé si hay un truco para evitar esto sin gastos generales. El problema es el siguiente:¿Por qué tenemos que especificar <> para una clase de plantilla con parámetros predeterminados?
Para una función de plantilla, podemos tener:
// Function declaration/definition
template<bool Option = false> void myFunction()
{
std::cout<<"Option = "<<Option<<std::endl;
}
// Then I can use :
myFunction<false>();
myFunction<true>();
myFunction(); // <- NO PROBLEM HERE
Ahora, para una clase de plantilla:
// Class definition/declaration
template<bool Option = false> class MyClass
{
};
// Then I can use :
myClass<false> x;
myClass<true> y;
myClass z; // <- PROBLEM HERE : only "MyClass<> z;" will compile !
¿Por qué es la razón de este comportamiento? ¿Hay algún truco para evitar eso? Para una clase con los parámetros optionnal pasados como plantilla, creo que este no es conveniente para el usuario final: él debe ser capaz de utilizar la implementación predeterminada como una clase de plantilla sin ...
"* ¿Hay algún truco para evitar eso? *" No, a menos que considere crear un nuevo tipo (con un nombre diferente) que herede públicamente de él y reenvía todos los constructores. – ildjarn
O simplemente use un typedef en lugar de herencia: 'typedef myClass myClassDef;' –
@Remy: Oh sí, o eso. :-P Creo que mi cerebro está listo para el día. – ildjarn