David Villa | 22 Dec 2010 01:37
Picon

Re: Inlining en g++

Bueno, por si alguien se queda con la duda.

Nos hemos dado cuenta, no sin cierto desconcierto, que la funciones «inline» tienen «enlace interno» sí o sí, es decir, que no son accesibles desde otra unidad de traducción (otro .cc). La única forma es definirla en cada unidad de traducción que quieras usarla, por eso funciona sin problema si están definidas en la declaración de la clase.

Saludos

PD: Ningún día te acostarás sin darte cuenta que sabes aún menos C++ del que pensabas :-P

2010/12/22 David Villa <dvilla <at> gmx.net>
Te puedes conectar al jabber y hablamos, esto tiene mucho lag... ;-)

2010/12/22 Sergio Pérez Camacho <sergio.perez.camacho <at> gmail.com>

Sólo en la declaración. Te repito, el listado 9.2 del capítulo al que me apuntas funciona porque el objeto que se genera llama a funciones contenidas en él mismo.

Un saludo,
Sergio.

--
Sergio Pérez Camacho :[ ID-PGP: 564B7D7F ]:






El 22 de diciembre de 2010 00:11, David Villa <dvilla <at> gmx.net> escribió:

¿Pones el "inline" también al definir el método o solo en la declaración?
http://arco.esi.uclm.es/~david.villa/pensar_en_C++/vol1/vol1.html#id2887018


2010/12/21 Sergio Pérez Camacho <sergio.perez.camacho <at> gmail.com>
En teoría sí, pero no. La funciones con un inline delante definidas en el .h e implementadas en el .cpp corresponiente no linkan si se llaman desde otros objetos diferentes al que contiene a esas funciones/métodos.

Es absurdo, ¿no? Quizá me pierdo algo, pero creo haber puesto especial interés en el tema.

Un saludo,
Sergio.

--
Sergio Pérez Camacho :[ ID-PGP: 564B7D7F ]:






El 21 de diciembre de 2010 23:07, David Villa <dvilla <at> gmx.net> escribió:

No sé si entiendo bien ¿quieres que un método concreto sea inline sin ponerlo en el .h? Para eso es la palabra reservada "inline", no?

Saludos




2010/12/21 Sergio Pérez Camacho <sergio.perez.camacho <at> gmail.com>
Gracias Ignacio,

esta solución esconde esas funciones en un archivo diferente, y si esas funciones corresponde a operaciones de una clase (imaginemos operaciones con número complejos) hace que se "rompa" la localización de las mismas.

Supongo que habrá alguna razón por la que los compiladores no pueden manejar un inline con una declaración en un .h y la implementación en el .cpp ... pero no llego a comprender cúal puede ser.

Un saludo,
Sergio.

--
Sergio Pérez Camacho :[ ID-PGP: 564B7D7F ]:






El 21 de diciembre de 2010 01:24, Ignacio Arriaga Sánchez <ignacio.arriaga <at> gmail.com> escribió:

Hola,

Si es por pura estética hay gente que crea un archivo .inl con las funciones inline definidas de esta forma:

inline int FooClass::FooFunction() { return fooVar; }

E incluyen el .inl desde el fichero de cabeceras de la clase.

A mí no me gusta mucho, pero es una forma de sacarlas de ahí.

Un saludo,
Iñaki.

(te va a salir duplicado Sergio, porque antes olvidé pulsar el reply to all).

2010/12/21 Sergio Pérez Camacho <sergio.perez.camacho <at> gmail.com>
Hola a todos,

vengo con una pregunta de C++ y g++. ¿Hay alguna forma de declarar/implementar una función inline sin tener que implementarla en su definición? Esa función debe ser utilizable por una clase A declarada en un archivo diferente a la función.

Es por pura estética.

Un saludo,
Sergio.

--
Sergio Pérez Camacho :[ ID-PGP: 564B7D7F ]:





_______________________________________________
CRySoL mailing list
http://crysol.inf-cr.uclm.es/
https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol




_______________________________________________
CRySoL mailing list
http://crysol.inf-cr.uclm.es/
https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol







<div>
<p>Bueno, por si alguien se queda con la duda.<br><br>Nos hemos dado cuenta, no sin cierto desconcierto, que la funciones &laquo;inline&raquo; tienen &laquo;enlace interno&raquo; s&iacute; o s&iacute;, es decir, que no son accesibles desde otra unidad de traducci&oacute;n (otro .cc). La &uacute;nica forma es definirla en cada unidad de traducci&oacute;n que quieras usarla, por eso funciona sin problema si est&aacute;n definidas en la declaraci&oacute;n de la clase.<br><br>Saludos<br><br>PD: Ning&uacute;n d&iacute;a te acostar&aacute;s sin darte cuenta que sabes a&uacute;n menos C++ del que pensabas :-P<br><br></p>
<div class="gmail_quote">2010/12/22 David Villa <span dir="ltr">&lt;<a href="mailto:dvilla <at> gmx.net">dvilla <at> gmx.net</a>&gt;</span><br><blockquote class="gmail_quote">Te puedes conectar al jabber y hablamos, esto tiene mucho lag... ;-)<br><br><div class="gmail_quote">

2010/12/22 Sergio P&eacute;rez Camacho <span dir="ltr">&lt;<a href="mailto:sergio.perez.camacho <at> gmail.com" target="_blank">sergio.perez.camacho <at> gmail.com</a>&gt;</span><div>
<div></div>
<div class="h5">
<br><blockquote class="gmail_quote">S&oacute;lo en la declaraci&oacute;n. Te repito, el listado 9.2 del cap&iacute;tulo al que me apuntas funciona porque el objeto que se genera llama a funciones contenidas en &eacute;l mismo.<div>

<div>
<div>
<br clear="all">Un saludo,<br>Sergio.<br><br>--<br>
Sergio P&eacute;rez Camacho :[ ID-PGP: 564B7D7F ]:<br><br><br><br><br><br><br>
</div>
<div class="gmail_quote">El 22 de diciembre de 2010 00:11, David Villa <span dir="ltr">&lt;<a href="mailto:dvilla <at> gmx.net" target="_blank">dvilla <at> gmx.net</a>&gt;</span> escribi&oacute;:<div>
<div></div>
<div>
<br><blockquote class="gmail_quote">
&iquest;Pones el "inline" tambi&eacute;n al definir el m&eacute;todo o solo en la declaraci&oacute;n? <br><a href="http://arco.esi.uclm.es/%7Edavid.villa/pensar_en_C++/vol1/vol1.html#id2887018" target="_blank">http://arco.esi.uclm.es/~david.villa/pensar_en_C++/vol1/vol1.html#id2887018</a><div>

<div></div>
<div>
<br><br><div class="gmail_quote">2010/12/21 Sergio P&eacute;rez Camacho <span dir="ltr">&lt;<a href="mailto:sergio.perez.camacho <at> gmail.com" target="_blank">sergio.perez.camacho <at> gmail.com</a>&gt;</span><br><blockquote class="gmail_quote">

En teor&iacute;a s&iacute;, pero no. La funciones con un inline delante definidas en el .h e implementadas en el .cpp corresponiente no linkan si se llaman desde otros objetos diferentes al que contiene a esas funciones/m&eacute;todos.<div><br></div>
<div>Es absurdo, &iquest;no? Quiz&aacute; me pierdo algo, pero creo haber puesto especial inter&eacute;s en el tema.<br><div>
<div>
<br clear="all">Un saludo,<br>Sergio.<br><br>--<br>Sergio P&eacute;rez Camacho :[ ID-PGP: 564B7D7F ]:<br><br><br><br><br><br><br>
</div>
<div class="gmail_quote">El 21 de diciembre de 2010 23:07, David Villa <span dir="ltr">&lt;<a href="mailto:dvilla <at> gmx.net" target="_blank">dvilla <at> gmx.net</a>&gt;</span> escribi&oacute;:<div>
<div></div>
<div>

<br><blockquote class="gmail_quote">
No s&eacute; si entiendo bien &iquest;quieres que un m&eacute;todo concreto sea inline sin ponerlo en el .h? Para eso es la palabra reservada "inline", no?<br><br>Saludos<div>
<div></div>
<div>
<br><br><br><br><div class="gmail_quote">

2010/12/21 Sergio P&eacute;rez Camacho <span dir="ltr">&lt;<a href="mailto:sergio.perez.camacho <at> gmail.com" target="_blank">sergio.perez.camacho <at> gmail.com</a>&gt;</span><br><blockquote class="gmail_quote">Gracias Ignacio,<div><br></div>
<div>esta soluci&oacute;n esconde esas funciones en un archivo diferente, y si esas funciones corresponde a operaciones de una clase (imaginemos operaciones con n&uacute;mero complejos) hace que se "rompa" la localizaci&oacute;n de las mismas.</div>

<div><br></div>
<div>Supongo que habr&aacute; alguna raz&oacute;n por la que los compiladores no pueden manejar un inline con una declaraci&oacute;n en un .h y la implementaci&oacute;n en el .cpp ... pero no llego a comprender c&uacute;al puede ser.</div>
<div>

<div>
<br clear="all">Un saludo,<br>Sergio.<br><br>--<br>Sergio P&eacute;rez Camacho :[ ID-PGP: 564B7D7F ]:<br><br><br><br><br><br><br>
</div>
<div class="gmail_quote">El 21 de diciembre de 2010 01:24, Ignacio Arriaga S&aacute;nchez <span dir="ltr">&lt;<a href="mailto:ignacio.arriaga <at> gmail.com" target="_blank">ignacio.arriaga <at> gmail.com</a>&gt;</span> escribi&oacute;:<div>

<div></div>
<div>
<br><blockquote class="gmail_quote">
<div>Hola,<br><br>Si es por pura est&eacute;tica hay gente que crea un archivo .inl con las funciones inline definidas de esta forma: <br><br>inline int FooClass::FooFunction() { return fooVar; }<br><br>E incluyen el .inl desde el fichero de cabeceras de la clase. <br><br>A m&iacute; no me gusta mucho, pero es una forma de sacarlas de ah&iacute;.<br><br>Un saludo,<br>I&ntilde;aki.<br><br>
</div>(te va a salir duplicado Sergio, porque antes olvid&eacute; pulsar el reply to all).<br><br><div class="gmail_quote">
<div>

2010/12/21 Sergio P&eacute;rez Camacho <span dir="ltr">&lt;<a href="mailto:sergio.perez.camacho <at> gmail.com" target="_blank">sergio.perez.camacho <at> gmail.com</a>&gt;</span><br>
</div>
<blockquote class="gmail_quote">
<div>Hola a todos,</div>
<div>
<div></div>
<div>
<div><br></div>
<div>vengo con una pregunta de C++ y g++. &iquest;Hay alguna forma de declarar/implementar una funci&oacute;n inline sin tener que implementarla en su definici&oacute;n? Esa funci&oacute;n debe ser utilizable por una clase A declarada en un archivo diferente a la funci&oacute;n.</div>

<div><br></div>
<div>Es por pura est&eacute;tica.</div>
<div><br></div>Un saludo,<br>Sergio.<br><br>--<br>Sergio P&eacute;rez Camacho :[ ID-PGP: 564B7D7F ]:<br><br><br><br><br><br>
</div>
</div>
<div>_______________________________________________<br>
CRySoL mailing list<br><a href="http://crysol.inf-cr.uclm.es/" target="_blank">http://crysol.inf-cr.uclm.es/</a><br><a href="https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol" target="_blank">https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol</a><br><br>
</div>
</blockquote>
</div>
<br>
</blockquote>
</div>
</div>
</div>
<br>
</div>
<br>_______________________________________________<br>
CRySoL mailing list<br><a href="http://crysol.inf-cr.uclm.es/" target="_blank">http://crysol.inf-cr.uclm.es/</a><br><a href="https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol" target="_blank">https://arco.inf-cr.uclm.es/cgi-bin/mailman/listinfo/crysol</a><br><br>
</blockquote>
</div>
<br>
</div>
</div>
</blockquote>
</div>
</div>
</div>
<br>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</blockquote>
</div>
</div>
</div>
<br>
</div>
</div>
</blockquote>
</div>
</div>
</div>
<br>
</blockquote>
</div>
<br>
</div>

Gmane