He oído hablar de código de infladas en el contexto de las plantillas de C++. Sé que no es el caso con los compiladores modernos de C++. Pero, quiero construir un ejemplo y convencerme a mí mismo.Plantillas C++: convencer a sí mismo contra el código de hinchazón
digamos que tenemos una clase
template< typename T, size_t N >
class Array {
public:
T * data();
private:
T elems_[ N ];
};
template< typename T, size_t N >
T * Array<T>::data() {
return elems_;
}
Además, digamos que contiene types.h
typedef Array< int, 100 > MyArray;
x.cpp
contiene
MyArray ArrayX;
y y.cpp
contiene
MyArray ArrayY;
Ahora, ¿cómo puedo verificar que el espacio de código para MyArray::data()
es igual para ambos ArrayX
y ArrayY
?
¿Qué más debería saber y verificar de este (u otro ejemplo similar)? Si hay consejos específicos de g ++, también estoy interesado en eso.
PD: En cuanto a la hinchazón, me preocupa incluso el más mínimo de hinchazones, ya que vengo del contexto incrustado.
Adición: ¿Cambia la situación de todos modos, si las clases de plantilla se crean instancias de forma explícita?
"tome la dirección de la función miembro en ambos módulos y verá que son las mismas" - esto invoca el compilador Schroedingers. Al observar algo, puedes alterarlo. En particular, tomar la dirección de algo restringe lo que un compilador puede hacer con él. P.ej. no puede poner un int en un registro si necesita tener un int * en él. – MSalters
Lo que se puede hacer (en teoría) a través de la información de depuración, pero no me preguntes cómo. – BCS
@MSalters: algo sin sentido, ya que C++ se define en torno a un comportamiento observable. Si no observas un programa en C++, el compilador podría simplemente emitir un solo 'nop'. – jalf