<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Forum du club des développeurs et IT Pro - Langage</title>
		<link>https://www.developpez.net/forums/</link>
		<description>Langage C++, Programmation Orientée Objet, Templates, etc. Avant de poster : FAQ C++</description>
		<language>fr</language>
		<lastBuildDate>Mon, 01 Jun 2026 21:27:36 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>15</ttl>
		<image>
			<url>https://forum.developpez.be/images/misc/rss.png</url>
			<title>Forum du club des développeurs et IT Pro - Langage</title>
			<link>https://www.developpez.net/forums/</link>
		</image>
		<item>
			<title><![CDATA[Comment configurer CMake pour utiliser des modules d'une lib qu'on a créée ?]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2183850&amp;goto=newpost</link>
			<pubDate>Fri, 22 May 2026 20:53:17 GMT</pubDate>
			<description><![CDATA[Salut, j'essaie d'utiliser...]]></description>
			<content:encoded><![CDATA[<div>Salut, j'essaie d'utiliser des modules cxx d'une lib que j'ai créé avec CMake/Clion et clang mais je ne sais pas comment configurer le projet pour le faire compiler. Mes fichiers de configurations CMake sont sur mon repo : <a rel="nofollow" href="https://github.com/LaurentDuroisin7601/ODFAEG" target="_blank">https://github.com/LaurentDuroisin7601/ODFAEG</a> (branche master) J'ai essayé avec msvc mais ça n'a jamais compilé et sur linux non plus :<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br /></div></td><td valign="top"><pre style="margin: 0">/usr/bin/cmake --build /home/laurent/odfaeg2-master/TestODFAEG2/cmake-build-debug --target MyGame -j <span style="color: #cc66cc;">4</span>
<span style="color: black;">&#91;</span><span style="color: #cc66cc;">1</span>/<span style="color: #cc66cc;">27</span><span style="color: black;">&#93;</span> Building CXX object <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/<span style="color: #cc66cc;">195512</span>c9cc46.bmi<span style="color: #FF0000;">'</span>
FAILED: <span style="color: black;">&#91;</span>code=<span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span> CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/<span style="color: #cc66cc;">195512</span>c9cc46.bmi 
/usr/bin/clang++  -I/home/laurent/odfaeg-install/include -I/home/laurent/odfaeg2-master/ODFAEG2/external -m64 -g -std=gnu+<span style="color: #cc66cc;">+20</span> -fcolor-diagnostics -I/usr/lib/llvm-<span style="color: #cc66cc;">18</span>/include --precompile -MD -MT <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/<span style="color: #cc66cc;">195512</span>c9cc46.bmi<span style="color: #FF0000;">'</span> -MF CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/<span style="color: #cc66cc;">195512</span>c9cc46.bmi.d @CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/<span style="color: #cc66cc;">195512</span>c9cc46.bmi.modmap -o <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/<span style="color: #cc66cc;">195512</span>c9cc46.bmi<span style="color: #FF0000;">'</span> -c /home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/rect.ixx
/home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/rect.ixx:<span style="color: #cc66cc;">4</span>:<span style="color: #cc66cc;">8</span>: fatal error: <span style="color: #0000ff;">module</span> <span style="color: #FF0000;">'</span>odfaeg.math.vec<span style="color: #FF0000;">'</span> <span style="color: #0000ff;">not</span> found
    <span style="color: #cc66cc;">4</span> | <span style="color: #0000ff;">import</span> odfaeg.math.vec;
      | ~~~~~~~^~~~~~
<span style="color: #cc66cc;">1</span> error generated.
<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span>/<span style="color: #cc66cc;">27</span><span style="color: black;">&#93;</span> Building CXX object <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/f372625f2a16.bmi<span style="color: #FF0000;">'</span>
FAILED: <span style="color: black;">&#91;</span>code=<span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span> CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/f372625f2a16.bmi 
/usr/bin/clang++  -I/home/laurent/odfaeg-install/include -I/home/laurent/odfaeg2-master/ODFAEG2/external -m64 -g -std=gnu+<span style="color: #cc66cc;">+20</span> -fcolor-diagnostics -I/usr/lib/llvm-<span style="color: #cc66cc;">18</span>/include --precompile -MD -MT <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/f372625f2a16.bmi<span style="color: #FF0000;">'</span> -MF CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/f372625f2a16.bmi.d @CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/f372625f2a16.bmi.modmap -o <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/f372625f2a16.bmi<span style="color: #FF0000;">'</span> -c /home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/shader.ixx
/home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/shader.ixx:<span style="color: #cc66cc;">6</span>:<span style="color: #cc66cc;">8</span>: fatal error: <span style="color: #0000ff;">module</span> <span style="color: #FF0000;">'</span>odfaeg.core.inputStream<span style="color: #FF0000;">'</span> <span style="color: #0000ff;">not</span> found
    <span style="color: #cc66cc;">6</span> | <span style="color: #0000ff;">import</span> odfaeg.core.inputStream;
      | ~~~~~~~^~~~~~
<span style="color: #cc66cc;">1</span> error generated.
<span style="color: black;">&#91;</span><span style="color: #cc66cc;">3</span>/<span style="color: #cc66cc;">27</span><span style="color: black;">&#93;</span> Building CXX object <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/e48235b35625.bmi<span style="color: #FF0000;">'</span>
FAILED: <span style="color: black;">&#91;</span>code=<span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span> CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/e48235b35625.bmi 
/usr/bin/clang++  -I/home/laurent/odfaeg-install/include -I/home/laurent/odfaeg2-master/ODFAEG2/external -m64 -g -std=gnu+<span style="color: #cc66cc;">+20</span> -fcolor-diagnostics -I/usr/lib/llvm-<span style="color: #cc66cc;">18</span>/include --precompile -MD -MT <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/e48235b35625.bmi<span style="color: #FF0000;">'</span> -MF CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/e48235b35625.bmi.d @CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/e48235b35625.bmi.modmap -o <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/e48235b35625.bmi<span style="color: #FF0000;">'</span> -c /home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/vertex.ixx
/home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/vertex.ixx:<span style="color: #cc66cc;">7</span>:<span style="color: #cc66cc;">8</span>: fatal error: <span style="color: #0000ff;">module</span> <span style="color: #FF0000;">'</span>odfaeg.math.vec<span style="color: #FF0000;">'</span> <span style="color: #0000ff;">not</span> found
    <span style="color: #cc66cc;">7</span> | <span style="color: #0000ff;">import</span> odfaeg.math.vec;
      | ~~~~~~~^~~~~~
<span style="color: #cc66cc;">1</span> error generated.
<span style="color: black;">&#91;</span><span style="color: #cc66cc;">4</span>/<span style="color: #cc66cc;">27</span><span style="color: black;">&#93;</span> Building CXX object <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/ae03baa5dc78.bmi<span style="color: #FF0000;">'</span>
FAILED: <span style="color: black;">&#91;</span>code=<span style="color: #cc66cc;">1</span><span style="color: black;">&#93;</span> CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/ae03baa5dc78.bmi 
/usr/bin/clang++  -I/home/laurent/odfaeg-install/include -I/home/laurent/odfaeg2-master/ODFAEG2/external -m64 -g -std=gnu+<span style="color: #cc66cc;">+20</span> -fcolor-diagnostics -I/usr/lib/llvm-<span style="color: #cc66cc;">18</span>/include --precompile -MD -MT <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/ae03baa5dc78.bmi<span style="color: #FF0000;">'</span> -MF CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/ae03baa5dc78.bmi.d @CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/ae03baa5dc78.bmi.modmap -o <span style="color: #FF0000;">'</span>CMakeFiles/odfaeg__odfaeg-graphics@synth_b567220ad52f.dir/ae03baa5dc78.bmi<span style="color: #FF0000;">'</span> -c /home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/buffer.ixx
/home/laurent/odfaeg-install/share/odfaeg/modules/Graphics/buffer.ixx:<span style="color: #cc66cc;">5</span>:<span style="color: #cc66cc;">8</span>: fatal error: <span style="color: #0000ff;">module</span> <span style="color: #FF0000;">'</span>odfaeg.core.nonCopyable<span style="color: #FF0000;">'</span> <span style="color: #0000ff;">not</span> found
    <span style="color: #cc66cc;">5</span> | <span style="color: #0000ff;">import</span> odfaeg.core.nonCopyable;
      | ~~~~~~~^~~~~~
<span style="color: #cc66cc;">1</span> error generated.
ninja: build stopped: subcommand failed.</pre></td></tr></table></code><hr />
</div>Merci.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>Laurent7601</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2183850/c-cpp/cpp/langage/configurer-cmake-utiliser-modules-d-lib-qu-on-creee/</guid>
		</item>
		<item>
			<title>erreur de link definitions multiples</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2182047&amp;goto=newpost</link>
			<pubDate>Wed, 11 Feb 2026 12:45:49 GMT</pubDate>
			<description><![CDATA[<div...]]></description>
			<content:encoded><![CDATA[<div><div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="26"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
&nbsp;
/usr/bin/ld : /tmp/ccY4DTYA.o:<span style="color: black;">&#40;</span>.bss+<span style="color: #cc66cc;">0x0</span><span style="color: black;">&#41;</span> : d&eacute;finitions multiples de &laquo; textureDesBlocs &raquo;; /tmp/cc4XFrpo.o:<span style="color: black;">&#40;</span>.bss+<span style="color: #cc66cc;">0x0</span><span style="color: black;">&#41;</span> : d&eacute;fini pour la premi&egrave;re fois ici
/usr/bin/ld : /tmp/ccY4DTYA.o:<span style="color: black;">&#40;</span>.bss+<span style="color: #cc66cc;">0x30</span><span style="color: black;">&#41;</span> : d&eacute;finitions multiples de &laquo; lesBlocs &raquo;; /tmp/cc4XFrpo.o:<span style="color: black;">&#40;</span>.bss+<span style="color: #cc66cc;">0x30</span><span style="color: black;">&#41;</span> : d&eacute;fini pour la premi&egrave;re fois ici
/usr/bin/ld : /tmp/ccY4DTYA.o:<span style="color: black;">&#40;</span>.bss+<span style="color: #cc66cc;">0x60</span><span style="color: black;">&#41;</span> : d&eacute;finitions multiples de &laquo; selection &raquo;; /tmp/cc4XFrpo.o:<span style="color: black;">&#40;</span>.bss+<span style="color: #cc66cc;">0x60</span><span style="color: black;">&#41;</span> : d&eacute;fini pour la premi&egrave;re fois ici
collect2: error: ld returned <span style="color: #cc66cc;">1</span> exit status</pre></td></tr></table></code><hr />
</div>Bien le bonjour !<br />
Ce sont des variables globales.<br />
elles sont déclarées dans un .hpp avec &quot;pragma once&quot;<br />
<br />
et le .hpp est 'include' dans 2 fichiers .cpp...<br />
<br />
Je comprend mal ou se trouve mon erreur...</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>GraineDeDev</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2182047/c-cpp/cpp/langage/erreur-link-definitions-multiples/</guid>
		</item>
		<item>
			<title>Utilisation de boost::chrono::process_user_cpu_clock</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2181546&amp;goto=newpost</link>
			<pubDate>Sun, 18 Jan 2026 14:34:41 GMT</pubDate>
			<description>Bonjour 
Pour faire un test...</description>
			<content:encoded><![CDATA[<div>Bonjour<br />
Pour faire un test de benchmark j'ai pensé utiliser boost::chrono::process_user_cpu_clock.<br />
J'ai la dernière version de boost mais apparemment cela ne suffit pas. Voici un petit programme qui ne compile plus si on décommente le bloc.<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;iostream&gt;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;boost/chrono/include.hpp&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> boost;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> boost::chrono;
&nbsp;
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    cout &lt;&lt; <span style="color: #FF0000;">&quot;Hello world!&quot;</span> &lt;&lt; endl;
&nbsp;
<span style="color: #339933;">#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY</span>
  cout&lt;&lt;<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span> YES 1&quot;</span>;
<span style="color: #339933;">#endif</span>
&nbsp;
<span style="color: #339933;">#ifdef BOOST_CHRONO_HAS_PROCESS_CLOCKS</span>
  cout&lt;&lt;<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span> YES 2&quot;</span>;
<span style="color: #339933;">#endif</span>
&nbsp;
<span style="color: #339933;">#ifdef BOOST_CHRONO_HAS_THREAD_CLOCK</span>
 cout&lt;&lt;<span style="color: #FF0000;">&quot;<span style="color: #800000;">\n</span> YES 3&quot;</span>;
<span style="color: #339933;">#endif</span>
&nbsp;
<span style="color: #808080;">/*</span>
<span style="color: #808080;">std::cout &lt;&lt; system_clock::now() &lt;&lt; '\n';</span>
&nbsp;
<span style="color: #808080;">#ifdef BOOST_CHRONO_HAS_CLOCK_STEADY</span>
<span style="color: #808080;">&nbsp; std::cout &lt;&lt; steady_clock::now() &lt;&lt; '\n';</span>
<span style="color: #808080;">#endif</span>
&nbsp;
<span style="color: #808080;">std::cout &lt;&lt; high_resolution_clock::now() &lt;&lt; '\n';</span>
&nbsp;
<span style="color: #808080;">#ifdef BOOST_CHRONO_HAS_PROCESS_CLOCKS</span>
<span style="color: #808080;">&nbsp; std::cout &lt;&lt; process_real_cpu_clock::now() &lt;&lt; '\n';</span>
<span style="color: #808080;">&nbsp; std::cout &lt;&lt; process_user_cpu_clock::now() &lt;&lt; '\n';</span>
<span style="color: #808080;">&nbsp; std::cout &lt;&lt; process_system_cpu_clock::now() &lt;&lt; '\n';</span>
<span style="color: #808080;">&nbsp; std::cout &lt;&lt; process_cpu_clock::now() &lt;&lt; '\n';</span>
<span style="color: #808080;">#endif</span>
&nbsp;
<span style="color: #808080;">#ifdef BOOST_CHRONO_HAS_THREAD_CLOCK</span>
<span style="color: #808080;">&nbsp; std::cout &lt;&lt; thread_clock::now() &lt;&lt; '\n';</span>
<span style="color: #808080;">#endif</span>
&nbsp;
<span style="color: #808080;">*/</span>
    <span style="color: #0000ff;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>J'ai droit au message d'erreur<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			 ... undefined reference to `boost::chrono::system_clock::now()'
			
		<hr />
	</div>
</div>Idem pour les autres.<br />
<br />
Il faut sans doute faire quelque chose en plus  mais quoi ? Merci d'avance pour vos réponses.<br />
<br />
PS : je sais qu'il y a un forum spécial pour boost mais la dernière question date du 08/07/2024 et est restée sans réponse depuis. En outre le fil [Actualité] date de  ... 2012 !<br />
Ne m'en veuillez pas de poser ma question ici.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>serge17</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2181546/c-cpp/cpp/langage/utilisation-boost-chrono-process_user_cpu_clock/</guid>
		</item>
		<item>
			<title><![CDATA[Problème de compilation avec l'option O3]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180826&amp;goto=newpost</link>
			<pubDate>Sat, 06 Dec 2025 17:20:22 GMT</pubDate>
			<description>Bonjour 
 
Suite à des...</description>
			<content:encoded><![CDATA[<div>Bonjour<br />
<br />
Suite à des discutions sur ce forum, j'ai voulu tester l'option O3 sur un programme qui fonctionnait bien sans. Comme cela ne fonctionnait plus très bien, j'ai fini par cerner le noeud du problème : il semble y avoir un problème quand on introduit une fonction écrite en assembleur. Voila ce que cela donne<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;iostream&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std;
<span style="color: #339933;">#define uint64_t unsigned long long</span>
<span style="color: #339933;">#define uint32_t unsigned long</span>
<span style="color: #808080;">//------------------------------------------</span>
&nbsp;
<span style="color: #0000ff;">void</span> print<span style="color: black;">&#40;</span><span style="color: #0000ff;">uint64_t</span> A<span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>, <span style="color: #0000ff;">uint32_t</span> N<span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
	cout &lt;&lt;<span style="color: #FF0000;">&quot;{&quot;</span>;
	<span style="color: #0000ff;">for</span> <span style="color: black;">&#40;</span><span style="color: #0000ff;">int</span> k = <span style="color: #cc66cc;">0</span>; k &lt; N; ++k<span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>
		cout&lt;&lt;A<span style="color: black;">&#91;</span>k<span style="color: black;">&#93;</span> &lt;&lt;<span style="color: #FF0000;">&quot;, &quot;</span>;
	<span style="color: black;">&#125;</span>
	cout &lt;&lt;<span style="color: #FF0000;">'</span><span style="color: #800000;">\b</span><span style="color: #FF0000;">'</span>&lt;&lt;<span style="color: #FF0000;">'</span><span style="color: #800000;">\b</span><span style="color: #FF0000;">'</span>&lt;&lt;<span style="color: #FF0000;">&quot;}&quot;</span>&lt;&lt;endl ;
<span style="color: black;">&#125;</span>
;
<span style="color: #808080;">// new T = T + k*A</span>
<span style="color: #808080;">// dim A = 2; dim T = 4;</span>
<span style="color: #808080;">// T[j] + k*A[j] = u[j] + b*v[j]</span>
<span style="color: #0000ff;">void</span> mul_add<span style="color: black;">&#40;</span><span style="color: #0000ff;">uint64_t</span> k, <span style="color: #0000ff;">uint64_t</span> A<span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>, <span style="color: #0000ff;">uint64_t</span> T<span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
   <span style="color: #0000ff;">uint64_t</span> c ;
   __asm__ __volatile__<span style="color: black;">&#40;</span>
      <span style="color: #FF0000;">&quot; mov %[A], %%rsi ;&quot;</span>
      <span style="color: #FF0000;">&quot; mov %[T], %%rdi ;&quot;</span>
      <span style="color: #FF0000;">&quot; mov $0, %[c] ;&quot;</span>           <span style="color: #808080;">// carry = 0</span>
      <span style="color: #FF0000;">&quot; mov $2, %%rcx ;&quot;</span>          <span style="color: #808080;">// loop counter (j = 2 - rcx)</span>
   <span style="color: #FF0000;">&quot; 0: ;&quot;</span>
      <span style="color: #FF0000;">&quot; mov (%%rsi), %%rax ;&quot;</span>     <span style="color: #808080;">// rax = A[j]</span>
      <span style="color: #FF0000;">&quot; mul %[k] ;&quot;</span>               <span style="color: #808080;">// k*A[j] = rax + rdx*b</span>
      <span style="color: #FF0000;">&quot; add (%%rdi), %%rax ;&quot;</span>     <span style="color: #808080;">// rax = rax + T[j] = u[j]</span>
      <span style="color: #FF0000;">&quot; adc $0, %%rdx ;&quot;</span>          <span style="color: #808080;">// rdx = rdx + CF = v[j]</span>
      <span style="color: #FF0000;">&quot; add %[c], %%rax ;&quot;</span>        <span style="color: #808080;">// rax = u[j] + carry -&gt; new T[j]</span>
      <span style="color: #FF0000;">&quot; adc $0, %%rdx ;&quot;</span>          <span style="color: #808080;">// rdx = v[j] + CF -&gt; new carry</span>
      <span style="color: #FF0000;">&quot; mov %%rax, (%%rdi) ;&quot;</span>     <span style="color: #808080;">// new T[j] = rax</span>
      <span style="color: #FF0000;">&quot; mov %%rdx, %[c] ;&quot;</span>        <span style="color: #808080;">// new carry = rdx</span>
      <span style="color: #FF0000;">&quot; add $8, %%rsi ;&quot;</span>
      <span style="color: #FF0000;">&quot; add $8, %%rdi ;&quot;</span>
   <span style="color: #FF0000;">&quot; loop 0b ;&quot;</span>
      <span style="color: #FF0000;">&quot; add %[c], (%%rdi) ;&quot;</span>      <span style="color: #808080;">// new T[2] = T[2] + carry</span>
      :
      : <span style="color: black;">&#91;</span>A<span style="color: black;">&#93;</span> <span style="color: #FF0000;">&quot;r&quot;</span> <span style="color: black;">&#40;</span>A<span style="color: black;">&#41;</span>
      , <span style="color: black;">&#91;</span>T<span style="color: black;">&#93;</span> <span style="color: #FF0000;">&quot;r&quot;</span> <span style="color: black;">&#40;</span>T<span style="color: black;">&#41;</span>
      , <span style="color: black;">&#91;</span>k<span style="color: black;">&#93;</span> <span style="color: #FF0000;">&quot;r&quot;</span> <span style="color: black;">&#40;</span>k<span style="color: black;">&#41;</span>
      , <span style="color: black;">&#91;</span>c<span style="color: black;">&#93;</span> <span style="color: #FF0000;">&quot;r&quot;</span> <span style="color: black;">&#40;</span>c<span style="color: black;">&#41;</span>                <span style="color: #808080;">// carry</span>
      : <span style="color: #FF0000;">&quot;cc&quot;</span>, <span style="color: #FF0000;">&quot;memory&quot;</span>, <span style="color: #FF0000;">&quot;%rax&quot;</span>, <span style="color: #FF0000;">&quot;%rcx&quot;</span>, <span style="color: #FF0000;">&quot;%rdx&quot;</span>
   <span style="color: black;">&#41;</span>;
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #808080;">//-----------------------------------</span>
<span style="color: #0000ff;">int</span> main<span style="color: black;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
  <span style="color: #0000ff;">uint64_t</span> x = <span style="color: #cc66cc;">2</span>;
  <span style="color: #0000ff;">uint64_t</span> y = <span style="color: #cc66cc;">3755218545365861964</span>ULL;
  <span style="color: #0000ff;">uint64_t</span> n = <span style="color: #cc66cc;">10203806521854051703</span>ULL;
  <span style="color: #0000ff;">uint64_t</span> q = <span style="color: #cc66cc;">17966832521566772153</span>ULL;
  <span style="color: #0000ff;">uint64_t</span> X<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span> = <span style="color: black;">&#123;</span>x,<span style="color: #cc66cc;">0</span><span style="color: black;">&#125;</span>, Y<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span> = <span style="color: black;">&#123;</span>y,<span style="color: #cc66cc;">0</span><span style="color: black;">&#125;</span>, N<span style="color: black;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: black;">&#93;</span> = <span style="color: black;">&#123;</span>n,<span style="color: #cc66cc;">0</span><span style="color: black;">&#125;</span>, T<span style="color: black;">&#91;</span><span style="color: #cc66cc;">4</span><span style="color: black;">&#93;</span> = <span style="color: black;">&#123;</span><span style="color: #cc66cc;">0</span><span style="color: black;">&#125;</span>;
&nbsp;
 <span style="color: #808080;">//  cout&lt;&lt;endl&lt;&lt;&quot;X = &quot;;print(X,2);</span>
 <span style="color: #808080;">//  cout&lt;&lt;endl&lt;&lt;&quot;Y = &quot;;print(Y,2);</span>
 <span style="color: #808080;">//  cout&lt;&lt;endl&lt;&lt;&quot;N = &quot;;print(N,2);</span>
 <span style="color: #808080;">//  cout&lt;&lt;endl&lt;&lt;&quot;T = &quot;;print(T,4);</span>
 <span style="color: #808080;">//  cout&lt;&lt;endl&lt;&lt;&quot;------------&quot;&lt;&lt;endl;</span>
   mul_add<span style="color: black;">&#40;</span>x,Y,T<span style="color: black;">&#41;</span>;
   cout&lt;&lt;endl&lt;&lt;<span style="color: #FF0000;">&quot;T = &quot;</span>;   print<span style="color: black;">&#40;</span>T,<span style="color: #cc66cc;">4</span><span style="color: black;">&#41;</span>;
&nbsp;
   <span style="color: #0000ff;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>Je travaille sous Windows avec Code::Blocks (dernière version) et MinGW_w64 comme compilateur (mais j'ai aussi testé avec Clang).<br />
Avec ces données, mul_add calcule 2*3755218545365861964 et place le résultat dans T<br />
Sans O3 le résultat est correct (aussi bien avec Clang qu'avec MinGW_w64.) On obtient<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			T = {7510437090731723928, 0, 0, 0}<br />
<br />
Process returned 0 (0x0)   execution time : 0.042 s<br />
Press any key to continue.
			
		<hr />
	</div>
</div>Les problème surviennent avec O3<br />
<br />
 ----------- Avec MinGW_w64   -----------------------<br />
Avec O3  (et toutes les lignes commentées comme ci-dessus), le résultat est correct. On obtient<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			T = {7510437090731723928, 0, 0, 0}<br />
<br />
Process returned 0 (0x0)   execution time : 0.013 s<br />
Press any key to continue.
			
		<hr />
	</div>
</div>Mais si on décommente une des lignes (ou plusieurs), on obtient<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			Process returned -1073741819 (0xC0000005)   execution time : 0.838 s<br />
Press any key to continue.
			
		<hr />
	</div>
</div>----------  Avec Clang -------------<br />
<br />
Avec O3 (et toutes les lignes commentées comme ci-dessus), le résultat est faux. On obtient<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			T = {15020874181463447856, 0, 0, 0}<br />
<br />
Process returned 0 (0x0)   execution time : 0.042 s<br />
Press any key to continue.
			
		<hr />
	</div>
</div>De plus, si on décommente une ou plusieurs lignes, on obtient, suivant les cas<br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			Process returned -1073741819 (0xC0000005)   execution time : 0.509 s<br />
Press any key to continue.
			
		<hr />
	</div>
</div>ou bien <br />
<div class="bbcode_container">
	<div class="bbcode_description">Citation:</div>
	<div class="bbcode_quote printable">
		<hr />
		
			terminate called after throwing an instance of 'std::bad_cast'<br />
  what():  std::bad_cast<br />
<br />
Process returned -1073740791 (0xC0000409)   execution time : 0.489 s<br />
Press any key to continue.
			
		<hr />
	</div>
</div>Cela est juste un exemple. J'ai obtenu d'autres situations tout aussi bizarres<br />
<ul><li style="">une erreur (0xC0000005) si on place un 'exit()' quelque part mais qui disparaît si on place cet 'exit()' un peu plus loin.</li></ul><br />
<ul><li style="">une variable de boucle réinitialisée, ce qui donne une boucle infinie</li></ul><br />
<ul><li style="">la modification de la valeur d'un constante, etc.</li></ul><br />
<br />
<br />
Merci pour vos lumières.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>serge17</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180826/c-cpp/cpp/langage/probleme-compilation-l-option-o3/</guid>
		</item>
		<item>
			<title>Deux programmes avec des performances paradoxales</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2180591&amp;goto=newpost</link>
			<pubDate>Sun, 23 Nov 2025 15:35:59 GMT</pubDate>
			<description>Bonjour 
 
La fonction...</description>
			<content:encoded><![CDATA[<div>Bonjour<br />
<br />
La fonction suivante<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #0000ff;">uint64_t</span>  f1<span style="color: black;">&#40;</span><span style="color: #0000ff;">int64_t</span> a, <span style="color: #0000ff;">int64_t</span> p<span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
   <span style="color: #0000ff;">int64_t</span> u = p, v = a, r = <span style="color: #cc66cc;">0</span>, s = <span style="color: #cc66cc;">1</span>;
   <span style="color: #0000ff;">while</span><span style="color: black;">&#40;</span>u != v<span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>  
      <span style="color: #0000ff;">if</span><span style="color: black;">&#40;</span>u &gt; v<span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>
         u -= v;
        <span style="color: #808080;">// code1</span>
      <span style="color: black;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: black;">&#123;</span>
         v -= u;
         <span style="color: #808080;">// code2</span>
      <span style="color: black;">&#125;</span>
   <span style="color: black;">&#125;</span>
   <span style="color: #0000ff;">return</span> s;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>effectue une soustraction et 2 tests de comparaison,  chacun ayant un de temps d'execution équivalent à celui d'une soustraction (rectifiez moi si je me trompe).<br />
J'ai donc pensé à la modifier de la façon suivante<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #0000ff;">uint64_t</span>  f2<span style="color: black;">&#40;</span><span style="color: #0000ff;">int64_t</span> a, <span style="color: #0000ff;">int64_t</span> p<span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
   <span style="color: #0000ff;">int64_t</span> u = p, v = a, r = <span style="color: #cc66cc;">0</span>, s = <span style="color: #cc66cc;">1</span>, w;
   <span style="color: #0000ff;">while</span><span style="color: black;">&#40;</span> <span style="color: black;">&#40;</span>w = u - v<span style="color: black;">&#41;</span> != <span style="color: #cc66cc;">0</span><span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>  
      <span style="color: #0000ff;">if</span><span style="color: black;">&#40;</span>w &gt; <span style="color: #cc66cc;">0</span><span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>
         u  = w;
        <span style="color: #808080;">// code1</span>
      <span style="color: black;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: black;">&#123;</span>
         v = -w;
         <span style="color: #808080;">// code2</span>
      <span style="color: black;">&#125;</span>
   <span style="color: black;">&#125;</span>
   <span style="color: #0000ff;">return</span> s;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>A la place de 3 &quot;soustractions&quot;, cette nouvelle fonction effectue une soustraction avec affectation (dans w) et un test du bit de signe (les autres affectations sont les mêmes).<br />
<br />
Je ne m'attendais pas à un gain énorme mais à ma grande surprise f2 est 20 à 25% plus lente que f1.<br />
<br />
Avez vous une explication ?<br />
Merci d'avance.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>serge17</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2180591/c-cpp/cpp/langage/programmes-performances-paradoxales/</guid>
		</item>
		<item>
			<title><![CDATA[Collection d'objets de types différents ?]]></title>
			<link>https://www.developpez.net/forums/showthread.php?t=2179163&amp;goto=newpost</link>
			<pubDate>Wed, 10 Sep 2025 16:37:45 GMT</pubDate>
			<description><![CDATA[Bonjour, 
 
J'utilise QT 6.4...]]></description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
<br />
J'utilise QT 6.4 et en particulier sa classe QSettings qui offre une gestion d'un fichier de configuration assez simple.<br />
Mais je trouve un peu dommage, à chaque fois que je souhaite accéder à une variable, de devoir faire la chose suivante :<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
QSetting _preferences;
&nbsp;
<span style="color: #808080;">// Pour lire une pr&eacute;f&eacute;rence</span>
_preferences.beginGroup<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;MonGroupeDePreferences&quot;</span><span style="color: black;">&#41;</span>;
     <span style="color: #0000ff;">bool</span> b = _preferences.value<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;UneCle&quot;</span><span style="color: black;">&#41;</span>.toBool<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>; <span style="color: #808080;">// value() retourne un QVariant qu'il faut typer chaque pr&eacute;f&eacute;rence, du type :</span>
_preferences.endGroup<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
&nbsp;
<span style="color: #808080;">// Pour &eacute;crire une pr&eacute;f&eacute;rence :</span>
_preferences.beginGroup<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;MonGroupeDePreferences&quot;</span><span style="color: black;">&#41;</span>;
     _preferences.setValue<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;UneCle&quot;</span>,<span style="color: #0000ff;">bool</span> value<span style="color: black;">&#41;</span>;
_preferences.endGroup<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;</pre></td></tr></table></code><hr />
</div>C'est certainement beaucoup mieux que rien, mais à la longue ça agace un peu.<br />
<br />
J'ai donc pensé à encapsuler un QSetting par une classe contenant des get/set pour chaque préférence, plus quelques fonctions de maintenance. Mais je me retrouve avec une collection de fonctions dupliquant énormément de code. Par exemple, voici un get :<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">bool</span> MyPrefs::getModeDemo<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>
    <span style="color: #0000ff;">bool</span> b = <span style="color: #0080ff;">false</span>;
    _preferences.beginGroup<span style="color: black;">&#40;</span>grpApp<span style="color: black;">&#41;</span>;
    QStringList keys = _preferences.childKeys<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>keys.contains<span style="color: black;">&#40;</span>modeDemoKey<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>
        b = _preferences.value<span style="color: black;">&#40;</span>modeDemoKey<span style="color: black;">&#41;</span>.toBool<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    <span style="color: black;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: black;">&#123;</span>
        _preferences.setValue<span style="color: black;">&#40;</span>modeDemoKey,modeDemoVal<span style="color: black;">&#41;</span>;
        b = modeDemoVal;
    <span style="color: black;">&#125;</span>
    _preferences.endGroup<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    <span style="color: #0000ff;">return</span> b;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>De base, pour accéder à une préférence, il faut le nom de sa clé et son type. J'ai alors pensé à créer une classe template pour stocker chaque préférence :<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">template</span>&lt;<span style="color: #0000ff;">class</span> T&gt;
<span style="color: #0000ff;">class</span> OnePref <span style="color: black;">&#123;</span>
<span style="color: #0000ff;">public</span>:
    OnePref<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>                   = <span style="color: #0000ff;">delete</span>;
    OnePref<span style="color: black;">&#40;</span>OnePref &amp;t<span style="color: black;">&#41;</span>         = <span style="color: #0000ff;">delete</span>;
    OnePref <span style="color: #0000ff;">operator</span>=<span style="color: black;">&#40;</span>OnePref<span style="color: black;">&#41;</span>  = <span style="color: #0000ff;">delete</span>;
&nbsp;
    OnePref<span style="color: black;">&#40;</span>QSettings * prefs, QString grp, QString cle, T valDefaut<span style="color: black;">&#41;</span>  <span style="color: black;">&#123;</span>
        set_prefs_obj<span style="color: black;">&#40;</span>prefs<span style="color: black;">&#41;</span>;
        _groupe = grp;
        _cle = cle;
        _valeur_defaut = valDefaut;
    <span style="color: black;">&#125;</span>
    ~OnePref<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>;
&nbsp;
    T get_valeur<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span>
        QVariant v = get_value_as_QVar<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
        <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>v.canConvert&lt;T&gt;<span style="color: black;">&#40;</span>v<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> <span style="color: #0000ff;">return</span> v.value&lt;T&gt;<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
        <span style="color: #0000ff;">else</span> v.clear<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    <span style="color: black;">&#125;</span>
<span style="color: black;">&#125;</span>;</pre></td></tr></table></code><hr />
</div>L'idée est ensuite de stocker toutes les préférences comme des pointeur vers ces objets patron dans une Map dont la clé est celle de la préférence. Je sais, ça duplique la clé de la préférence, mais je crois que c'est rapide...<br />
 Mais le compilateur n'est logiquement pas ok : les pointeurs ne pointent pas vers un même type.<br />
<br />
D'où l'idée ensuite de créer une classe virtuelle de laquelle hérite les objets préférence, puis de placer un pointeur vers cette classe virtuelle dans la Map.<br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br /></div></td><td valign="top"><pre style="margin: 0"><span style="color: #0000ff;">class</span> AbstractPref <span style="color: black;">&#123;</span>
<span style="color: #0000ff;">public</span>:
    AbstractPref<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:__preferences<span style="color: black;">&#40;</span><span style="color: #0080ff;">nullptr</span><span style="color: black;">&#41;</span><span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>;
    <span style="color: #0000ff;">virtual</span> ~AbstractPref<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>;
    <span style="color: #0000ff;">void</span> set_prefs_obj<span style="color: black;">&#40;</span>QSettings * p<span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span> <span style="color: #0000ff;">if</span> <span style="color: black;">&#40;</span>p<span style="color: black;">&#41;</span> __preferences = p; <span style="color: black;">&#125;</span>
&nbsp;
    QString     get_groupe<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>        <span style="color: #0000ff;">const</span> <span style="color: black;">&#123;</span> <span style="color: #0000ff;">return</span> _groupe;       <span style="color: black;">&#125;</span>
    QString     get_cle<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>           <span style="color: #0000ff;">const</span> <span style="color: black;">&#123;</span> <span style="color: #0000ff;">return</span> _cle;          <span style="color: black;">&#125;</span>
    QSettings * get_pref_obj<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>      <span style="color: #0000ff;">const</span> <span style="color: black;">&#123;</span> <span style="color: #0000ff;">return</span> __preferences; <span style="color: black;">&#125;</span>
    QVariant    get_value_as_QVar<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>             <span style="color: #0000ff;">const</span>;
    <span style="color: #0000ff;">void</span>        set_value_as_QVar<span style="color: black;">&#40;</span>QVariant &amp;v<span style="color: black;">&#41;</span>  <span style="color: #0000ff;">const</span>;
&nbsp;
    QSettings * __preferences;
    QString     _groupe;
    QString     _cle;
    QVariant    _valeur_defaut;
<span style="color: black;">&#125;</span>;
&nbsp;
<span style="color: #0000ff;">class</span> OnePref  : <span style="color: #0000ff;">public</span> AbstractPref <span style="color: black;">&#123;</span> <span style="color: #808080;">/*..*/</span> <span style="color: black;">&#125;</span>;
&nbsp;
<span style="color: #0000ff;">class</span> MyNewPrefs <span style="color: black;">&#123;</span>
<span style="color: #0000ff;">public</span>:   MyNewPrefs<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    ~MyNewPrefs<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">void</span> ajouter_preferences<span style="color: black;">&#40;</span>AbstractPref * p<span style="color: black;">&#41;</span> <span style="color: black;">&#123;</span> _all_prefs<span style="color: black;">&#91;</span>p-&gt;get_cle<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span> = p; <span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">private</span>:
    <span style="color: #0000ff;">void</span> set_prefs<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    QSettings                   _preferences;
    QMap&lt;QString,AbstractPref*&gt; _all_prefs;
<span style="color: black;">&#125;</span>;</pre></td></tr></table></code><hr />
</div>Ça fonctionne. Sauf que pour accéder à une préférence il va me falloir transtyper<b> _all_prefs[&quot;UneCle&quot;]</b> (ligne 30) qui renvoi un AbstractPref*, ce qui n'est pas dans l'esprit de ce que je souhaite faire.<br />
<br />
Typiquement, j'aimerais pouvoir faire :<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><span style="color: #0000ff;">bool</span> b = _all_prefs<span style="color: black;">&#91;</span><span style="color: #FF0000;">&quot;UneCleBool&quot;</span><span style="color: black;">&#93;</span>.value<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;</code><hr />
</div>J'ai relu mon Stroustrup sur l'héritage et les classes patrons, sans avancer vraiment.<br />
<br />
J'envisage d'ajouter dans la classe virtuelle une variable par type utilisé et un indice vers le type à utiliser...<br />
<br />
Est-ce que c'est possible ce genre de chose ?<br />
<br />
Sylvain</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>sylvain1984</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2179163/c-cpp/cpp/langage/collection-d-objets-types-differents/</guid>
		</item>
		<item>
			<title>Aide pour liaison de class</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2177509&amp;goto=newpost</link>
			<pubDate>Sun, 15 Jun 2025 11:34:42 GMT</pubDate>
			<description>salut as tous , je souhaite...</description>
			<content:encoded><![CDATA[<div>salut as tous , je souhaite modifier un &quot;bool passeEnModeChauffage&quot; d'une classe &quot;Froid&quot; via une autre class &quot;Chauffage&quot;, comment puis-je faire merci <br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #339933;">#ifndef FROID_H</span>
<span style="color: #339933;">#define FROID_H</span>
&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;ctime&gt;</span>
&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;consignes.h&quot;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;temperatures.h&quot;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;filtre.h&quot;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;relais.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">class</span> Froid
<span style="color: black;">&#123;</span>
&nbsp;
<span style="color: #0000ff;">public</span>:
    Froid<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">bool</span> gifFroid = <span style="color: #0080ff;">false</span>;
&nbsp;
    <span style="color: #0000ff;">bool</span> gifVentilationFroid = <span style="color: #0080ff;">false</span>;
    <span style="color: #0000ff;">bool</span> gifVentilationIntFroid = <span style="color: #0080ff;">false</span>;
    <span style="color: #0000ff;">bool</span> gifsVitessesIntFroid = <span style="color: #0080ff;">false</span>;
    <span style="color: #0000ff;">bool</span> gifVentilationExtFroid = <span style="color: #0080ff;">false</span>;
    <span style="color: #0000ff;">bool</span> gifVentilationDegFroid = <span style="color: #0080ff;">false</span>;
&nbsp;
    <span style="color: #0000ff;">bool</span> gifDegivrageFroid = <span style="color: #0080ff;">false</span>;
    <span style="color: #0000ff;">bool</span> gifEgouttageFroid = <span style="color: #0080ff;">false</span>;
&nbsp;
    <span style="color: #0000ff;">bool</span> degivrageFroid = <span style="color: #0080ff;">false</span>;
&nbsp;
    <span style="color: #0000ff;">bool</span> passeEnModeChauffage = <span style="color: #0080ff;">false</span>;
    <span style="color: #0000ff;">bool</span> passeEnModeCanicule = <span style="color: #0080ff;">false</span>;
&nbsp;
    <span style="color: #0000ff;">void</span> modeFroid<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    <span style="color: #0000ff;">void</span> etatArretFroid<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;</pre></td></tr></table></code><hr />
</div><div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;froid.h&quot;</span>
&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;QDebug&gt;</span>
&nbsp;
Froid::Froid<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    qDebug<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> &lt;&lt; <span style="color: #FF0000;">&quot;Froid&quot;</span>;
&nbsp;
    m_froidConsignes = <span style="color: #0000ff;">new</span> Consignes<span style="color: black;">&#40;</span>QString<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;settings/consignes.ini&quot;</span><span style="color: black;">&#41;</span>, QSettings::IniFormat<span style="color: black;">&#41;</span>;
&nbsp;
    m_froidTemperatures = <span style="color: #0000ff;">new</span> Temperatures<span style="color: black;">&#40;</span>QString<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;settings/temperatures.ini&quot;</span><span style="color: black;">&#41;</span>, QSettings::IniFormat<span style="color: black;">&#41;</span>;
&nbsp;
    m_froidFiltre = <span style="color: #0000ff;">new</span> Filtre<span style="color: black;">&#40;</span>QString<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;settings/filtre.ini&quot;</span><span style="color: black;">&#41;</span>, QSettings::IniFormat<span style="color: black;">&#41;</span>;
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Froid::etatMarcheFroid<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    m_froidRelais.desactiveRelaiEteHiver<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    departTempoVoletsFr = time<span style="color: black;">&#40;</span><span style="color: #0080ff;">NULL</span><span style="color: black;">&#41;</span>;
    transitionGainableFroid = TEMPO_VOLETS_FROID;
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Froid::etatVoletsFroid<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    gifVentilationFroid = <span style="color: #0080ff;">true</span>;
    m_froidRelais.activeRelaisVentilationInt<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    m_froidFiltre -&gt;departChronoFiltre = time<span style="color: black;">&#40;</span><span style="color: #0080ff;">NULL</span><span style="color: black;">&#41;</span>;
    departTempoControleTemperatureFr = time<span style="color: black;">&#40;</span><span style="color: #0080ff;">NULL</span><span style="color: black;">&#41;</span>;
    transitionGainableFroid = TEMPO_CONTROLE_TEMPERATURE_FROID;
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Froid::etatControleTemperatureFroid<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    m_froidRelais.activeRelaisVentilationInt<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Froid::etatDepartFroid<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    gifVentilationFroid = <span style="color: #0080ff;">false</span>;
    gifVentilationIntFroid = <span style="color: #0080ff;">true</span>;
    gifVentilationExtFroid = <span style="color: #0080ff;">true</span>;
    m_froidRelais.activeRelaisVentFroid<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    departTempoV4VFr = time<span style="color: black;">&#40;</span><span style="color: #0080ff;">NULL</span><span style="color: black;">&#41;</span>;
    transitionGainableFroid = TEMPO_V4V_FROID;
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Froid::etatModeFroidChauffage<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    passeEnModeChauffage = <span style="color: #0080ff;">true</span>;
    etatArretFroid<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    transitionGainableFroid = ARRET_FROID;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div><div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #339933;">#ifndef CHAUFFAGE_H</span>
<span style="color: #339933;">#define CHAUFFAGE_H</span>
&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;ctime&gt;</span>
&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;consignes.h&quot;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;temperatures.h&quot;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;filtre.h&quot;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;relais.h&quot;</span>
&nbsp;
<span style="color: #0000ff;">class</span> Chauffage
<span style="color: black;">&#123;</span>
&nbsp;
<span style="color: #0000ff;">public</span>:
    Chauffage<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">bool</span> gifChauffage = <span style="color: #0080ff;">false</span>;
&nbsp;
    <span style="color: #0000ff;">bool</span> gifVentilationChauffage = <span style="color: #0080ff;">false</span>;
    <span style="color: #0000ff;">bool</span> gifVentilationIntChauffage = <span style="color: #0080ff;">false</span>;
    <span style="color: #0000ff;">bool</span> gifVentilationExtChauffage = <span style="color: #0080ff;">false</span>;
    <span style="color: #0000ff;">bool</span> gifVentilationDegChauffage = <span style="color: #0080ff;">false</span>;
&nbsp;
    <span style="color: #0000ff;">bool</span> gifDegivrageChauffage = <span style="color: #0080ff;">false</span>;
    <span style="color: #0000ff;">bool</span> gifElectriqueChauffage = <span style="color: #0080ff;">false</span>;
    <span style="color: #0000ff;">bool</span> gifEgouttageChauffage = <span style="color: #0080ff;">false</span>;
&nbsp;
    <span style="color: #0000ff;">bool</span> degivrageChauffage = <span style="color: #0080ff;">false</span>;
&nbsp;
    <span style="color: #0000ff;">bool</span> passeEnModeFroidEnChauffage = <span style="color: #0080ff;">false</span>;
&nbsp;
    <span style="color: #0000ff;">void</span> modeChauffage<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
&nbsp;
    <span style="color: #0000ff;">void</span> etatArretChauffage<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;</pre></td></tr></table></code><hr />
</div><div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &quot;chauffage.h&quot;</span>
&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;QDebug&gt;</span>
&nbsp;
Chauffage::Chauffage<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    qDebug<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> &lt;&lt; <span style="color: #FF0000;">&quot;Chauffage&quot;</span>;
&nbsp;
    m_chauffageConsignes = <span style="color: #0000ff;">new</span> Consignes<span style="color: black;">&#40;</span>QString<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;settings/consignes.ini&quot;</span><span style="color: black;">&#41;</span>, QSettings::IniFormat<span style="color: black;">&#41;</span>;
&nbsp;
    m_chauffageTemperatures = <span style="color: #0000ff;">new</span> Temperatures<span style="color: black;">&#40;</span>QString<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;settings/temperatures.ini&quot;</span><span style="color: black;">&#41;</span>, QSettings::IniFormat<span style="color: black;">&#41;</span>;
&nbsp;
    m_chauffageFiltre = <span style="color: #0000ff;">new</span> Filtre<span style="color: black;">&#40;</span>QString<span style="color: black;">&#40;</span><span style="color: #FF0000;">&quot;settings/filtre.ini&quot;</span><span style="color: black;">&#41;</span>, QSettings::IniFormat<span style="color: black;">&#41;</span>;
<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> Chauffage::etatMarcheChauffage<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#123;</span>
    <span style="color: #808080;">//Froid::passeEnModeChauffage = false;</span>
    m_chauffageRelais.activeRelaiEteHiver<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    departTempoVoletsCh = time<span style="color: black;">&#40;</span><span style="color: #0080ff;">NULL</span><span style="color: black;">&#41;</span>;
    transitionGainableChauffage = TEMPO_VOLETS_CHAUFFAGE;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div></div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>ludoiphone</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2177509/c-cpp/cpp/langage/aide-liaison-class/</guid>
		</item>
		<item>
			<title>static_pointer_cast et dynamic_pointer_cast</title>
			<link>https://www.developpez.net/forums/showthread.php?t=2177412&amp;goto=newpost</link>
			<pubDate>Mon, 09 Jun 2025 13:50:25 GMT</pubDate>
			<description>Bonjour, 
 
je cherche à...</description>
			<content:encoded><![CDATA[<div>Bonjour,<br />
<br />
je cherche à comprendre les static_pointer_cast et les dynamic_pointer cast. On m'a indiqué que ces templates permettent de faire des cast de shared_ptr.<br />
Cependant en relisant l'extrait de code suivant, j'avoue avoir du mal à comprendre : <br />
<br />
<div class="bbcode_container">
	<div class="bbcode_description">Code:</div>
	<hr /><code class="bbcode_code"><table cellspacing="0" cellpadding="0"><tr><td valign="top" width="33"><div style="border: 1px dashed gray; padding-left: 5px; padding-right: 5px; margin-right: 5px; text-align: right; font-family: monospace">1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br /></div></td><td valign="top"><pre style="margin: 0">&nbsp;
&nbsp;
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;iostream&gt;</span>
<span style="color: #339933;">#include</span><span style="color: #FF0000;"> &lt;memory&gt;</span>
&nbsp;
<span style="color: #0000ff;">using</span> <span style="color: #0000ff;">namespace</span> std;
&nbsp;
<span style="color: #0000ff;">class</span> Polygone<span style="color: black;">&#123;</span>
<span style="color: #0000ff;">public</span>:
    <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> display<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>cout &lt;&lt; <span style="color: #FF0000;">&quot;Polygone&quot;</span> &lt;&lt; endl;<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: black;">&#125;</span>;
&nbsp;
<span style="color: #0000ff;">class</span> Triangle : <span style="color: #0000ff;">public</span> Polygone<span style="color: black;">&#123;</span>
<span style="color: #0000ff;">public</span>:
    <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> display<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>cout &lt;&lt; <span style="color: #FF0000;">&quot;Triangle display&quot;</span> &lt;&lt; endl;<span style="color: black;">&#125;</span>
    <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> display2<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>cout &lt;&lt; <span style="color: #FF0000;">&quot;Triangle display2&quot;</span> &lt;&lt; endl;<span style="color: black;">&#125;</span>
&nbsp;
<span style="color: black;">&#125;</span>;
&nbsp;
<span style="color: #0000ff;">int</span> main<span style="color: black;">&#40;</span><span style="color: #0000ff;">int</span> argc, <span style="color: #0000ff;">char</span>* argv<span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>
    shared_ptr&lt;Polygone&gt; l_sharedPtrPoly<span style="color: black;">&#40;</span><span style="color: #0000ff;">new</span> Polygone<span style="color: black;">&#41;</span>;
    l_sharedPtrPoly-&gt;display<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
&nbsp;
    shared_ptr&lt;Triangle&gt; l_sharedPtrTriSt = static_pointer_cast&lt;Triangle&gt;<span style="color: black;">&#40;</span>l_sharedPtrPoly<span style="color: black;">&#41;</span>;
    l_sharedPtrTriSt-&gt;display<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
&nbsp;
    <span style="color: #808080;">// Downcast d'un objet polymorphique avec dynamic_pointer_cast</span>
    shared_ptr&lt;Triangle&gt; l_sharedPtrTriDyn = dynamic_pointer_cast&lt;Triangle&gt;<span style="color: black;">&#40;</span>l_sharedPtrPoly<span style="color: black;">&#41;</span>;
    <span style="color: #0000ff;">if</span><span style="color: black;">&#40;</span>l_sharedPtrTriDyn<span style="color: black;">&#41;</span><span style="color: black;">&#123;</span>
        l_sharedPtrTriDyn-&gt;display<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
        l_sharedPtrTriDyn-&gt;display2<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>;
    <span style="color: black;">&#125;</span><span style="color: #0000ff;">else</span><span style="color: black;">&#123;</span>
        cout &lt;&lt; <span style="color: #FF0000;">&quot;Pointeur nul&quot;</span> &lt;&lt; endl;
    <span style="color: black;">&#125;</span>
&nbsp;
    <span style="color: #0000ff;">return</span> <span style="color: #cc66cc;">0</span>;
<span style="color: black;">&#125;</span></pre></td></tr></table></code><hr />
</div>J'obtiens alors en sortie :<br />
Polygone<br />
Polygone<br />
Pointeur nul<br />
<br />
Voici ce qui me questionne :<br />
1) Je m'attendrais à obtenir en sortie Triangle sur la 2ème ligne. Là, je ne comprends pas l'intérêt du cast.<br />
2) Je ne comprends pas la 3eme ligne. C'est comme si le cast n'avait pas fonctionné et le pointeur est non initialisé. Est-ce que cela est dû qu'ici mes objets ne sont pas dynamiques?<br />
<br />
Merci par avance de vos réponses.</div>

]]></content:encoded>
			<category domain="https://www.developpez.net/forums/f1272/c-cpp/cpp/langage/">Langage</category>
			<dc:creator>CaptainKrabs</dc:creator>
			<guid isPermaLink="true">https://www.developpez.net/forums/d2177412/c-cpp/cpp/langage/static_pointer_cast-dynamic_pointer_cast/</guid>
		</item>
	</channel>
</rss>
