Le temps de compilation sizeof_array sans l'aide d'une macro

C'est juste quelque chose qui m'a gêné pour le couple des derniers jours, je ne pense pas que c'est possible de le résoudre mais j'ai vu un modèle de magie avant.

Va ici:

Pour obtenir le nombre d'éléments dans un standard C++ tableau que je pouvais utiliser une macro (1), ou un typesafe fonction inline (2):

(1)

#define sizeof_array(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0]))

(2)

template <typename T>
size_t sizeof_array(const T& ARRAY){
    return (sizeof(ARRAY)/sizeof(ARRAY[0]));
}

Comme vous pouvez le voir, le premier a le problème d'être une macro (pour le moment je considère qu'un problème) et l'autre a le problème de ne pas être en mesure d'obtenir la taille d'un tableau au moment de la compilation, c'est à dire je ne peux pas écrire:

enum ENUM{N=sizeof_array(ARRAY)};

ou

BOOST_STATIC_ASSERT(sizeof_array(ARRAY)==10);//Assuming the size 10..

Personne ne sait si cela peut être résolu?

Mise à jour:

Cette question a été créé avant constexpr a été introduit. Aujourd'hui, vous pouvez simplement utiliser:

template <typename T>
constexpr auto sizeof_array(const T& iarray) {
    return (sizeof(iarray) / sizeof(iarray[0]));
}

OriginalL'auteur Viktor Sehr | 2009-09-30