Outils pour utilisateurs

Outils du site


prog:cpp:propagate_const

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
prog:cpp:propagate_const [2025/07/06 17:53] – Remise en forme rootprog:cpp:propagate_const [2025/07/06 19:06] (Version actuelle) – Fix value_types root
Ligne 128: Ligne 128:
  
 <code cpp> <code cpp>
 +#include <https://raw.githubusercontent.com/jbcoe/propagate_const/refs/heads/master/propagate_const.h>
 +
 struct Y { struct Y {
   Y() : m_ptrX(new X()) {};   Y() : m_ptrX(new X()) {};
Ligne 158: Ligne 160:
 Impossible. Impossible.
  
 +=====indirect_value=====
  
 +''indirect_value'' est un ''std::unique_ptr'' avec la préservation de ''const''. Il n'y a pas d'équivalent avec ''shared_ptr'' / ''pointeur'' / ''référence''.
 +
 +====Pointeur====
 +
 +<code cpp>
 +#include <https://raw.githubusercontent.com/jbcoe/indirect_value/refs/heads/main/indirect_value.h>
 +
 +struct Y {
 +  Y() : m_ptrX(isocpp_p1950::make_indirect_value<X>()) {};
 +
 +  void f() const {
 +    std::cout << "f (const)\n";
 +    m_ptrX->g();
 +  }
 +
 +  void f() {
 +    std::cout << "f (non-const)\n";
 +    m_ptrX->g();
 +  }
 +
 +  isocpp_p1950::indirect_value<X> m_ptrX;
 +};
 +</code>
 +
 +Rendu :
 +
 +<code>
 +f (non-const)
 +g (non-const)
 +f (const)
 +g (const)
 +</code>
 +
 +=====value_types=====
 +
 +====Référence====
 +
 +<code cpp>
 +#include <https://raw.githubusercontent.com/jbcoe/value_types/refs/heads/main/polymorphic.h>
 +
 +struct Y {
 +  Y() : m_ptrX(m_X) {};
 +
 +  void f() const {
 +    std::cout << "f (const)\n";
 +    m_ptrX->g();
 +  }
 +
 +  void f() {
 +    std::cout << "f (non-const)\n";
 +    m_ptrX->g();
 +  }
 +
 +  xyz::indirect<X> m_ptrX;
 +  X m_X;
 +};
 +</code>
 +
 +Rendu :
 +
 +<code>
 +f (non-const)
 +g (non-const)
 +f (const)
 +g (const)
 +</code>
 +
 +====Pointeur / allocation dynamique====
 +
 +<code cpp>
 +#include <https://raw.githubusercontent.com/jbcoe/value_types/refs/heads/main/polymorphic.h>
 +
 +struct Y
 +{
 +  Y() : m_ptrX(xyz::polymorphic<X>()) {};
 + 
 +  void f() const {
 +    std::cout << "f (const)\n";
 +    m_ptrX->g();
 +  }
 + 
 +  void f() {
 +    std::cout << "f (non-const)\n";
 +    m_ptrX->g();
 +  }
 + 
 +  xyz::polymorphic<X> m_ptrX;
 +};
 +</code>
 +
 +Rendu :
 +
 +<code>
 +f (non-const)
 +g (non-const)
 +f (const)
 +g (const)
 +</code>
prog/cpp/propagate_const.1751817197.txt.gz · Dernière modification : de root