Je souhaite optimiser mes classes Vector et Matrix (qui sont des modèles de classe pour être exact) en utilisant les instructions SIMD et les intrinsèques du compilateur. Je veux seulement optimiser pour le cas où le type d'élément est "float". L'utilisation des instructions SIMD nécessite de toucher les membres de données. Puisque je ne veux pas être dérangé par la difficulté de maintenir deux classes séparées, je veux pouvoir activer/désactiver certains membres de données basés sur le type du paramètre de modèle. Un autre avantage de cette approche, dans le cas où c'est applicable, est que je peux utiliser le même code du cas général pour les fonctions pour lesquelles je ne veux pas écrire de spécialisation. Par conséquent, ce que je veux réaliser dans le code pseudo est:Inclusion/exclusion conditionnelle des données Membres dans les modèles de classes
template< typename T >
class Vector3 {
if type(T) == float:
union {
__m128 m128;
struct {
float x, y, z, pad;
};
};
else
T x, y, z;
endif
};
Je sais que l'inclusion conditionnelle des fonctions des membres est possible grâce à l'utilisation des Boost.enable_if ou des installations similaires. Ce que je cherche cependant, c'est l'inclusion conditionnelle des membres de données. Comme toujours, votre aide est très appréciée. D'autres suggestions valables sont également les bienvenues.
Merci.
Vérifiez cette discussion: http://lists.boost.org/Archives/boost/2009/01 /147103.php – Anonymous