46 votes

Obtenir min / max de la valeur de la statique constexpr tableau au moment de la compilation

Disons que j'ai un tableau d'entiers définie ainsi:

static constexpr int IntArray[] = {1, 5, 10, 12, 17};

Est-il possible d'obtenir la valeur minimale ou maximale au moment de la compilation?

66voto

Quentin Points 3904

Let's get le C++17 solution hors de la voie pour l'avenir de la recherche-landers:

constexpr int IntArray[] = {1, 5, 10, 12, 17};
constexpr int min = *std::min_element(std::begin(IntArray), std::end(IntArray));
static_assert(min == 1);

C++11 est plus pointilleux avec constexpr fonctions, de sorte que nous avons à mettre en œuvre un algorithme récursif. Celui-ci est un simple, linéaire:

template <class T>
constexpr T &constexpr_min(T &a, T &b) {
    return a > b ? b : a;
}

template <class T>
constexpr T &arrayMin_impl(T *begin, T *end) {
    return begin + 1 == end
        ? *begin
        : constexpr_min(*begin, arrayMin_impl(begin + 1, end));
}

template <class T, std::size_t N>
constexpr T &arrayMin(T(&arr)[N]) {
    return arrayMin_impl(arr, arr + N);
}

constexpr int IntArray[] = {1, 5, 10, 12, 17};
constexpr int min = arrayMin(IntArray);

Voir en direct sur Coliru

Prograide.com

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.

Powered by:

X