Contenido del método de clase determinado por el valor de la plantilla
Usando c++ 14 o c++11, ¿tenemos un enfoque elegante para realizar la siguiente tarea? El número de miembros y el tipo de operaciones están determinados por el valor de entrada de la plantilla ‘count’
“`c++
template<int count="">
class show{
public:
run(){
if (count == 1){
int x;
} else if(count ==2){
int x, y;
}else if(count ==3){
int x, y, z;
}
<pre><code> if (count == 1){
printf("res: %d \n", x);
} else if(count ==2){
printf("res: %d \n", x+y);
}else if(count ==3){
printf("res: %d \n", x+y+z);
}
}
</code></pre>
};
“`
Actualización: ¿podemos utilizar especialización parcial o algo relacionado con la plantilla en este caso?
davy.ai
Sí, podemos usar la especialización parcial en este caso para proporcionar un enfoque elegante para la tarea. En lugar de usar condiciones para definir el número de miembros y operaciones, podemos usar especialización parcial para definir la plantilla para cada posible valor de conteo.
Aquí tienes un ejemplo de cómo podríamos usar la especialización parcial:
“`c++
template
class show;
template<>
class show<1> {
public:
void run() {
int x;
printf(“res: %d \n”, x);
}
};
template<>
class show<2> {
public:
void run() {
int x, y;
printf(“res: %d \n”, x+y);
}
};
template<>
class show<3> {
public:
void run() {
int x, y, z;
printf(“res: %d \n”, x+y+z);
}
};
Ten en cuenta que todavía necesitamos definir las variables miembro para cada valor de conteo, que en este ejemplo no están inicializadas y, por lo tanto, producirán un comportamiento indefinido. También podemos definir las variables miembro como parámetros de plantilla o como argumentos para el constructor para evitar este problema.