Xavier Lamorlette
Sommaire :
Cela permet de ne plus recourir au Mixin (aussi connu sous le nom de CRTP : “Curiously Recurring Template Pattern”) pour faire du polymorphisme statique.
Au lieu de :
template <typename T>
class Base {
void interface() {
static_cast<T *>(this)->implementation();
}
};
class Derived: Base<Derived> {
void implementation();
};
On fait, en C++23 :
class Base {
template <typename Self>
void interface(this Self && self){
self.implementation();
}
};
class Derived: Base {
void implementation();
};
expected
std::expected
permet de retourner une valeur ou une erreur :
std::expected<int, std::string> foo() {
if … {
return 12;
} else {
return std::unexpected("error text");
}
}
auto result = foo();
if (result) {
std::cout << "value: " << *result << std::endl;
} else {
std::cout << "error: " << result.error() << std::endl;
}
optional
Dans std::optional, ajout des méthodes and_then(), or_else() et transform() qui prennent en paramètre une fonction.
string
std::string::contains()
mdspan
std::mdspan
est un “multidimensional span”.
spanstream
Un std::spanstream
est un stream
auquel on fournit un span
à utiliser :
char buffer[128] { 0 };
std::span span_buffer(buffer);
std::basic_spanstream span_streanm(span_buffer);
span_streanm << "foo bar";
La dernière mise à jour de cette page date de février 2024.
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.