Xavier Lamorlette

C++ : Divers

Sommaire :

Lexical cast

lexical_cast convertit en utilisant les opérateurs de flux.
En cas d'échec, ça lève une exception bad_lexical_cast.

#include <boost/lexical_cast.hpp>
string s = lexical_cast<string>(3);

Literals

Prédéfinis

using namespace std::literals;

auto s = "hello"s;          // std::string
auto t = 3h + 28min + 12s;  // t is a chrono::duration

constexpr auto tenMillion = 10'000'000;  // on peut utiliser ' pour séparer les chiffres d'un nombre

Utilisateur

constexpr unsigned long operator ""_K (unsigned long x) {
    return 1024 * x;
}

Range based loop pour une classe utilisateur

class A_iterator {
    A_iterator(const A_iterator & other);
    A & operator * () const;
    A_iterator & operator ++ () {
        […]
        return * this;
    }
};
bool operator != (const A_iterator & lhs, const A_iterator & rhs);

class A_const_iterator {
    A_const_iterator(const A_iterator & other);
    const A & operator * () const;
    A_const_iterator & operator ++ () {
        […]
        return * this;
    }
};
bool operator != (const A_const_iterator & lhs, const A_const_iterator & rhs);

class A_collection {
    A_iterator begin();
    A_iterator end();
    A_const_iterator begin() const;
    A_const_iterator end() const;
};

std::reference_wrapper

Une std::reference_wrapper est une référence copiable.

int a = 42;
std::reference_wrapper<int> b = std::ref(a);
int c = 12;
std::reference_wrapper<int> d = std::ref(c);
b = d;

Static Assertion

Une assertion statique est une assertion vérifiée à la compilation.

template<typename T>
class A {
    T *_t;
    static_assert(not(is_void<T>::value, "Instantiating template class A with void");
};

Tuples : fonctions utilitaires

make_tuple(t1, …, tn)

tie(t1, …, tn) ~ make_tuple(ref(t1), …, ref(tn)):
  int i;
  string s;
  tie(i, s) = make_tuple(3, "hello");
  tie(i, ignore) = //

La dernière mise à jour de cette page date de décembre 2020.

Le contenu de ce site est, en tant qu'œuvre originale de l'esprit, protégé par le droit d'auteur.
Pour tout commentaire, vous pouvez m'écrire à xavier.lamorlette@gmail.com.