Spontanément, j'avais pensé à utiliser une union, mais avant le nouveau standard, ça pose problème avec les types équipés d'un constructeur (pour des raisons évidentes).
int main() { return sizeof (maxsize<short, maxsize<Big, char>>) ; } === >8 ================================================= Du coup, avec le type maxsize<Big, char>, il faut appeler le constructeur et le destructeur manuellement sur le membre ? C'est un comportement indéfini, ou dépendant de l'implémentation ?
On 07/26/11 04:09, Fabien LE LEZ wrote:
template<class T, class U> struct Helper<T, U, 0>
{
typedef U Type;
};
Spontanément, j'avais pensé à utiliser une union, mais avant le
nouveau standard, ça pose problème avec les types équipés d'un
constructeur (pour des raisons évidentes).
int main()
{
return sizeof (maxsize<short, maxsize<Big, char>>) ;
}
=== >8 =================================================
Du coup, avec le type maxsize<Big, char>, il faut appeler le
constructeur et le destructeur manuellement sur le membre ? C'est un
comportement indéfini, ou dépendant de l'implémentation ?
Spontanément, j'avais pensé à utiliser une union, mais avant le nouveau standard, ça pose problème avec les types équipés d'un constructeur (pour des raisons évidentes).
int main() { return sizeof (maxsize<short, maxsize<Big, char>>) ; } === >8 ================================================= Du coup, avec le type maxsize<Big, char>, il faut appeler le constructeur et le destructeur manuellement sur le membre ? C'est un comportement indéfini, ou dépendant de l'implémentation ?
Fabien LE LEZ
On Tue, 26 Jul 2011 06:59:06 +0200, Mickaël Wolff :
j'avais pensé à utiliser une union
Si je ne m'abuse, ta solution renvoie un type différent de a et b. Sa taille est correcte, mais ce n'était pas la question.
Le problème initial était :
typedef uint8_t a; typedef uint16_t b;
typedef maxtype(a,b) c; // équivalent à typedef uint16_t c;
Comment définis-tu "maxtype" (en utilisant "union") de telle sorte que maxtype(a,b) soit exactement "uint16_t" ?
On Tue, 26 Jul 2011 06:59:06 +0200, Mickaël Wolff
<mickael.wolff@laposte.net>:
j'avais pensé à utiliser une union
Si je ne m'abuse, ta solution renvoie un type différent de a et b. Sa
taille est correcte, mais ce n'était pas la question.
Le problème initial était :
typedef uint8_t a;
typedef uint16_t b;
typedef maxtype(a,b) c; // équivalent à typedef uint16_t c;
Comment définis-tu "maxtype" (en utilisant "union") de telle sorte que
maxtype(a,b) soit exactement "uint16_t" ?
typedef maxtype(a,b) c; // équivalent à typedef uint16_t c;
Comment définis-tu "maxtype" (en utilisant "union") de telle sorte que maxtype(a,b) soit exactement "uint16_t" ?
Han la mauvaise fois :D Tu as habillement éludé LA question :
Je cherche une macro "maxtype" qui retourne le maximum en sizeof de
plusieurs types
C'est vrai que la question n'était pas globalement cohérente. Mais dans ce cas, maxtype est un nom très mal choisi, la macro devrait s'appeler BIGGEST_TYPE si on veut effectivement prendre le plus gros type.
Mais dans l'absolu, moi j'avais compris qu'il ne voulait que la taille, et non le type. Qu'il pensait devoir d'abord déterminer le plus gros type pour déterminer la taille du plus gros type.
On 07/26/11 07:26, Fabien LE LEZ wrote:
Le problème initial était :
typedef uint8_t a;
typedef uint16_t b;
typedef maxtype(a,b) c; // équivalent à typedef uint16_t c;
Comment définis-tu "maxtype" (en utilisant "union") de telle sorte que
maxtype(a,b) soit exactement "uint16_t" ?
Han la mauvaise fois :D Tu as habillement éludé LA question :
Je cherche une macro "maxtype" qui retourne le maximum en sizeof de
plusieurs types
C'est vrai que la question n'était pas globalement cohérente. Mais
dans ce cas, maxtype est un nom très mal choisi, la macro devrait
s'appeler BIGGEST_TYPE si on veut effectivement prendre le plus gros type.
Mais dans l'absolu, moi j'avais compris qu'il ne voulait que la
taille, et non le type. Qu'il pensait devoir d'abord déterminer le plus
gros type pour déterminer la taille du plus gros type.
typedef maxtype(a,b) c; // équivalent à typedef uint16_t c;
Comment définis-tu "maxtype" (en utilisant "union") de telle sorte que maxtype(a,b) soit exactement "uint16_t" ?
Han la mauvaise fois :D Tu as habillement éludé LA question :
Je cherche une macro "maxtype" qui retourne le maximum en sizeof de
plusieurs types
C'est vrai que la question n'était pas globalement cohérente. Mais dans ce cas, maxtype est un nom très mal choisi, la macro devrait s'appeler BIGGEST_TYPE si on veut effectivement prendre le plus gros type.
Mais dans l'absolu, moi j'avais compris qu'il ne voulait que la taille, et non le type. Qu'il pensait devoir d'abord déterminer le plus gros type pour déterminer la taille du plus gros type.
Fabien LE LEZ
On Wed, 27 Jul 2011 10:21:05 +0200, Mickaël Wolff :
moi j'avais compris qu'il ne voulait que la taille, et non le type.