Ho la funzione di registrazione chiamata in più punti del codice. Per ogni registro, devo fornire 2 costanti di tempo di compilazione. Ci sono 2 approcci per realizzare:Quale approccio è migliore per fornire costanti di tempo di compilazione a una funzione? Argomento funzione vs. Parametro modello
(1) di argomento di funzione:
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);
}
chiamata come,
log(str, __LINE__, __COUNTER__);
(2) parametro Template:
template<typename T, int LINE, int COUNT>
void log (T &obj)
{
// T is used for some purpose
if(debug)
logging(obj.out(), LINE, COUNT);
}
chiamalo come,
log<__LINE__, __COUNTER__>(str);
io non sono in grado di decidere, perché prima approccio offre la semplicità, ma stiamo passando costante in fase di compilazione. Il secondo approccio è perfetto, ma probabilmente il tempo di compilazione aumenterebbe. Questo compito è noioso e non ho ancora implementato nessuno di questi, quindi non ho alcun benchmark.
Sarà di grande aiuto se qualcuno può rispondere a questa esperienza/conoscenza.
Come si definisce "migliore"? Entrambi funzionano *, quindi quali criteri useresti per dire che uno è migliore dell'altro? –
@NicolBolas, perché voglio scegliere il migliore tra 2 in base al tempo di compilazione e al runtime. Inoltre c'è una leggera modifica nel codice di esempio. – iammilind
Qualunque cosa faccia la funzione 'logging', sarà * certamente * più lenta che passare due interi come argomenti. Quindi non vedo come le prestazioni di runtime cambieranno molto in entrambi i modi. Questo suona sospettosamente come un'ottica prematura. –