Diciamo che ho una classe C++:Evitare C++ istanze esplosive di classi template che accettano i parametri int
template<int N>
class Text {
public:
Text() { }
char _buf[N];
};
Si incapsula semplicemente una stringa C.
Ora, diciamo che scrivo un metodo che richiederà un altro oggetto Text
, con una lunghezza M
e ne copia il contenuto in questo oggetto.
template<int N>
class Text {
public:
Text() { }
char _buf[N];
template<int M> void copy(const Text<M> &t) {
strncpy(_buf, t.cstr(), N - 1);
_buf[N - 1] = '\0';
}
};
È questo che va causare un'esplosione di codice oggetto duplicato in cui l'unica differenza sono le costanti N
e M
utilizzati, soprattutto se uso questo metodo copy
con oggetti che hanno un sacco di differenti N
e M
?
Poiché il metodo stesso non dipende da M
affatto, c'è un altro modo di affrontare questo in modo tale da evitare questa esplosione di codice oggetto duplicato?
Quello che per lo più accadere è che tutte le chiamate di copia sarà inline in modo che non funzioni reali saranno emessi a tutti. Sembra un'ottimizzazione prematura che dovrebbe essere semplicemente ignorata. – Jack
In realtà, no. Il mio codice oggetto ha raddoppiato le dimensioni dall'uso di solo un paio di valori di N e M. Sto cercando di mantenere le dimensioni del codice oggetto in basso. – Ana
Lo stai compilando con i flag di ottimizzazione? – Jack