Je suis en train de faire quelque chose comme ceci :
mais j’obtiens cette erreur :
Comment faire correctement le typedef conditionnels ?
Je suis en train de faire quelque chose comme ceci :
mais j’obtiens cette erreur :
Comment faire correctement le typedef conditionnels ?
Utiliser l' std::conditional
méta-fonction de C++11.
#include <type_traits> //include this
typedef std::conditional<sizeof(int) <= 4,
std::mt19937,
std::mt19937_64>::type Engine;
Notez que si le type que vous utilisez, en sizeof
est un paramètre du modèle, dire T
, alors vous devez utiliser typename
comme:
typedef typename std::conditional<sizeof(T) <= 4, // T is template parameter
std::mt19937,
std::mt19937_64>::type Engine;
Ou faire Engine
dépendent T
comme:
template<typename T>
using Engine = typename std::conditional<sizeof(T) <= 4,
std::mt19937,
std::mt19937_64>::type;
Qui est flexible, parce que maintenant vous pouvez l'utiliser comme:
Engine<int> engine1;
Engine<long> engine2;
Engine<T> engine3; // where T could be template parameter!
Si vous n’avez pas C ++11 disponible (bien qu’il semble vous faire si vous avez l’intention d’utiliser `` ), puis vous pouvez appliquer la même chose sans C ++11 support en utilisant la Métaprogrammation de Boost Library (MPL). Voici un exemple compilable :
Ceci affiche le nom tronqué de sur mon système, comme un
ici de 4 octets.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.