c++0x et User-defined literals

Le
Michael Doubez
Quel calme après toutes ces discussions !

J'aimerais lancer un petit sondage.
D'après C++1x, je pourrai écrire:

// proxy fonctor pour élever un nombre à la puissance en paramètre
struct puissance_proxy
{
puissance_proxy(long n=0):nombre(n){}
long nombre;

// renvoie nombre à la puissance p
constexpr long operator()(long p)const
{
return pow(nombre,p); // supposant que pow(long,long) existe
}
};

// user defined literal pour générer un puissance_proxy d'un nombre
constexpr puissance_proxy operator "" puissance(long n)
{
return puissance_proxy(n);
}

Ce qui me permet d'écrire:
const long valeur=2puissance(8);

Pour ou contre une utilisation de ce genre ?

--
Michael
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Senhon
Le #19823861
"Michael Doubez" de discussion :

Quel calme après toutes ces discussions !

J'aimerais lancer un petit sondage.
D'après C++1x, je pourrai écrire:

// proxy fonctor pour élever un nombre à la puissance en paramètre
struct puissance_proxy
{
puissance_proxy(long n=0):nombre(n){}
long nombre;

// renvoie nombre à la puissance p
constexpr long operator()(long p)const
{
return pow(nombre,p); // supposant que pow(long,long) existe
}
};

// user defined literal pour générer un puissance_proxy d'un nombre
constexpr puissance_proxy operator "" puissance(long n)
{
return puissance_proxy(n);
}

Ce qui me permet d'écrire:
const long valeur=2puissance(8);

Pour ou contre une utilisation de ce genre ?



Pour ! c'est plus concis !
Ceux que cette écriture gênerai ne sont pas obliger d'utiliser.
Gabriel Dos Reis
Le #19824311
Michael Doubez
| Quel calme après toutes ces discussions !
|
| J'aimerais lancer un petit sondage.
| D'après C++1x, je pourrai écrire:
|
| // proxy fonctor pour élever un nombre à la puissance en param ètre
| struct puissance_proxy
| {
| puissance_proxy(long n=0):nombre(n){}

Note que comme le constructeur n'est pas constexpr, ce type n'est pas un
« literal type »

| long nombre;
|
| // renvoie nombre à la puissance p
| constexpr long operator()(long p)const
| {
| return pow(nombre,p); // supposant que pow(long,long) existe

est-ce que 'pow()' est constexpr ?

-- Gaby
Michael Doubez
Le #19824441
On 24 juil, 17:02, Gabriel Dos Reis
Michael Doubez
| Quel calme après toutes ces discussions !
|
| J'aimerais lancer un petit sondage.
| D'après C++1x, je pourrai écrire:
|
| // proxy fonctor pour élever un nombre à la puissance en paramètr e
| struct puissance_proxy
| {
|     puissance_proxy(long n=0):nombre(n){}

Note que comme le constructeur n'est pas constexpr, ce type n'est pas un
« literal type »



Oups. Merci


|     long nombre;
|
|     // renvoie nombre à la puissance p
|     constexpr long operator()(long p)const
|     {
|        return pow(nombre,p); // supposant que pow(long,long) ex iste

est-ce que 'pow()' est constexpr ?



long pow(long, long) n'existe pas dans le standard alors pourquoi pas.

Remplaçons la pusissance par un unsigned pour éviter les problèmes de
signe:
constexpr unsigned long pow(long v, unsigned p,long accumulate=1l)
{
return p>0?pow(v,p-1,accumulate*v):accumulate;
}

--
Michael
Gabriel Dos Reis
Le #19824521
Michael Doubez
| On 24 juil, 17:02, Gabriel Dos Reis | > Michael Doubez | >
| > | Quel calme après toutes ces discussions !
| > |
| > | J'aimerais lancer un petit sondage.
| > | D'après C++1x, je pourrai écrire:
| > |
| > | // proxy fonctor pour élever un nombre à la puissance en pa ramètre
| > | struct puissance_proxy
| > | {
| > |     puissance_proxy(long n=0):nombre(n){}
| >
| > Note que comme le constructeur n'est pas constexpr, ce type n'est pas un
| > « literal type »
|
| Oups. Merci

Dans ce cas, tu as envie d'écrire

constexpr long valeur=2puissance(8);

si tu voulais t'assurer que valeur est vraiment une constante.

-- Gaby
Publicité
Poster une réponse
Anonyme