22 Dec 2010 01:37
Re: Inlining en g++
David Villa <dvilla <at> gmx.net>
2010-12-22 00:37:42 GMT
2010-12-22 00:37:42 GMT
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#id28870182010/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?
Saludos2010/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,(te va a salir duplicado Sergio, porque antes olvidé pulsar el reply to all).
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.
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 «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.<br><br>Saludos<br><br>PD: Ningún día te acostarás sin darte cuenta que sabes aún menos C++ del que pensabas :-P<br><br></p> <div class="gmail_quote">2010/12/22 David Villa <span dir="ltr"><<a href="mailto:dvilla <at> gmx.net">dvilla <at> gmx.net</a>></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érez Camacho <span dir="ltr"><<a href="mailto:sergio.perez.camacho <at> gmail.com" target="_blank">sergio.perez.camacho <at> gmail.com</a>></span><div> <div></div> <div class="h5"> <br><blockquote class="gmail_quote">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.<div> <div> <div> <br clear="all">Un saludo,<br>Sergio.<br><br>--<br> Sergio Pé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"><<a href="mailto:dvilla <at> gmx.net" target="_blank">dvilla <at> gmx.net</a>></span> escribió:<div> <div></div> <div> <br><blockquote class="gmail_quote"> ¿Pones el "inline" también al definir el método o solo en la declaració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érez Camacho <span dir="ltr"><<a href="mailto:sergio.perez.camacho <at> gmail.com" target="_blank">sergio.perez.camacho <at> gmail.com</a>></span><br><blockquote class="gmail_quote"> 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.<div><br></div> <div>Es absurdo, ¿no? Quizá me pierdo algo, pero creo haber puesto especial interés en el tema.<br><div> <div> <br clear="all">Un saludo,<br>Sergio.<br><br>--<br>Sergio Pé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"><<a href="mailto:dvilla <at> gmx.net" target="_blank">dvilla <at> gmx.net</a>></span> escribió:<div> <div></div> <div> <br><blockquote class="gmail_quote"> 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?<br><br>Saludos<div> <div></div> <div> <br><br><br><br><div class="gmail_quote"> 2010/12/21 Sergio Pérez Camacho <span dir="ltr"><<a href="mailto:sergio.perez.camacho <at> gmail.com" target="_blank">sergio.perez.camacho <at> gmail.com</a>></span><br><blockquote class="gmail_quote">Gracias Ignacio,<div><br></div> <div>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.</div> <div><br></div> <div>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.</div> <div> <div> <br clear="all">Un saludo,<br>Sergio.<br><br>--<br>Sergio Pé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ánchez <span dir="ltr"><<a href="mailto:ignacio.arriaga <at> gmail.com" target="_blank">ignacio.arriaga <at> gmail.com</a>></span> escribió:<div> <div></div> <div> <br><blockquote class="gmail_quote"> <div>Hola,<br><br>Si es por pura esté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í no me gusta mucho, pero es una forma de sacarlas de ahí.<br><br>Un saludo,<br>Iñaki.<br><br> </div>(te va a salir duplicado Sergio, porque antes olvidé pulsar el reply to all).<br><br><div class="gmail_quote"> <div> 2010/12/21 Sergio Pérez Camacho <span dir="ltr"><<a href="mailto:sergio.perez.camacho <at> gmail.com" target="_blank">sergio.perez.camacho <at> gmail.com</a>></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++. ¿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.</div> <div><br></div> <div>Es por pura estética.</div> <div><br></div>Un saludo,<br>Sergio.<br><br>--<br>Sergio Pé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>

RSS Feed