Seleccione el argumento de la plantilla en el tiempo de ejecución en C ++

Supongamos que tengo un conjunto de funciones y clases que están diseñadas para usar precisión simple ( float ) o double . Por supuesto, podría escribir solo dos piezas de código de arranque, o desordenar con macros. ¿Pero puedo cambiar el argumento de la plantilla en tiempo de ejecución?

No, no puede cambiar los argumentos de plantilla en tiempo de ejecución, ya que el comstackdor crea una instancia de las plantillas en tiempo de comstackción. Lo que puede hacer es que ambas plantillas se deriven de una clase base común, siempre use la clase base en su código y luego decida qué clase derivada usar en tiempo de ejecución:

 class Base { ... }; template  class Foo : public Base { ... }; Base *newBase() { if(some condition) return new Foo(); else return new Foo(); } 

Las macros tienen el mismo problema que las plantillas, ya que se expanden en tiempo de comstackción.

Las plantillas son un mecanismo de tiempo de comstackción. Por cierto, las macros también son (estrictamente hablando, un mecanismo de preprocesamiento) que viene incluso antes de la comstackción).

Las plantillas son puramente una construcción de tiempo de comstackción, el comstackdor expandirá una plantilla y creará su clase / función con el argumento especificado y lo traducirá directamente al código.

Si está intentando cambiar entre foo y foo en el tiempo de ejecución, deberá utilizar algunos trucos de metaprogtwigción o simplemente tener rutas de código separadas para cada uno.

Intereting Posts