Tengo la función de registro que se llama en varios lugares a lo largo del código. Para cada registro, debo suministrar 2 constantes de tiempo de compilación. Hay 2 enfoques para llevar a cabo:¿Qué enfoque es mejor para suministrar constantes de tiempo de compilación a una función? Argumento de la función contra el parámetro de la plantilla
(1) del argumento de función:
template<typename T>
void log (const T &obj, const int LINE, const int COUNT)
{
// T is used for some purpose
if(debug)
logging(obj.out(), LINE, COUNT);
}
llamada como,
log(str, __LINE__, __COUNTER__);
(2) parámetro de plantilla:
template<typename T, int LINE, int COUNT>
void log (T &obj)
{
// T is used for some purpose
if(debug)
logging(obj.out(), LINE, COUNT);
}
llámalo como,
log<__LINE__, __COUNTER__>(str);
No soy capaz de decidir, porque el primer enfoque ofrece simplicidad, pero estamos pasando constantes en tiempo de compilación. El segundo enfoque es perfecto, pero el tiempo de compilación probablemente aumentaría. Esta tarea es tediosa, y aún no he implementado ninguna de ellas, por lo que no tengo ningún punto de referencia.
Será una gran ayuda si alguien puede responder a esto desde su experiencia/conocimiento.
¿Cómo se define "mejor"? Ambos * trabajan *, entonces, ¿qué criterio usarías para decir que uno es mejor que el otro? –
@NicolBolas, ya que quiero elegir el mejor entre 2 en función del tiempo de compilación y el tiempo de ejecución. También hay una ligera modificación en el código de ejemplo. – iammilind
Cualquiera que sea la función 'logging', * con toda certeza * será más lenta que pasar dos enteros como argumentos. Así que no veo cómo el rendimiento del tiempo de ejecución cambiará mucho en ambos sentidos. Esto suena sospechosamente como una optimización prematura. –