Me pregunto si el tipo se puede determinar como información de tiempo de ejecución en C++.tiempo de ejecución determinar el tipo para C++
(1) A pesar de que mi pregunta es bastante general, para simplificar, que comenzará a partir de un ejemplo sencillo:
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char * argv[])
{
if (strcmp(argv[1], "int")==0)
{
int t = 2;
}else if (strcmp(argv[1], "float")==0)
{
float t = 2.2;
}
cout << t << endl; // error: ‘t’ was not declared in this scope
return 0;
}
Para este ejemplo, hay dos preguntas:
(a) "argv [1] to t "es incorrecto, pero ¿la información de tipo en la cadena C argv [1] se puede convertir a la palabra clave de tipo real? Por lo tanto, no es necesario que verifiquemos cada tipo con la cláusula if-else y strcmp.
(b) cómo hacer que la variable t definida dentro del alcance local de la cláusula if aún sea válida fuera. es decir, ¿cómo "exportar" una variable local al exterior de su alcance?
(2) En general, no es específico del simple ejemplo anterior, ¿cuáles son las formas habituales de determinar los tipos de tiempo de ejecución? Me parece que podría haber algunas formas:
(a) uno puede poner su procesamiento de la variable definida del tipo dentro del mismo ámbito de su definición. p.ej.
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc, char * argv[])
{
if (strcmp(argv[1], "int")==0)
{
int t = 2;
cout << t << endl;
}else if (strcmp(argv[1], "float")==0)
{
float t = 2.2;
cout << t << endl;
}
return 0;
}
Y posiblemente utilice la función de plantilla para hacer que el código común para varios tipos sea reutilizable.
(b) o uno puede usar el tipo de clase abstracta y el polimorfismo para exportar indirectamente la definición, pero no estoy seguro de cómo exactamente.
Gracias por su consejo!
+1 Iba a publicar la solución polimórfica. Tiene mucho más sentido que boost.variant porque con boost.variant deberías verificar el tipo para cada operación. –