← index
cplusplus17.Examples/features/compile_time/arr_average.cpp
Source: cplusplus17.Examples/features/compile_time/arr_average.cpp
/*
 Calculate Average of an Array at Compile Time
*/
#include<iostream>
#include<string>
#include<cstdlib>
#include<array>

template<typename T, std::size_t size>
constexpr T Average(const T *arr) {
    T total = T();
    for(unsigned int i = 0; i < size; ++i) {
        total += arr[i];
    }
    return total/size;
}

template<typename T, std::size_t size, const T *arr>
class AverageT {
public:
    static constexpr T value = Average<T, size>(arr);
};

constexpr int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int main() {
    constexpr int v = AverageT<int, 10, arr>::value;
    std::cout << "Average calculated at Compile time: " << v << "\n";
    
    // calculated size at compile time
    std::array<int, AverageT<int, 10, arr>::value> array_sized;
    for(std::size_t i = 0; i < array_sized.size(); ++i) {
        array_sized[i] = i*i;
        std::cout << "array at index: " << i << " := " << array_sized[i] << "\n";
    }
    return 0;
}