Static arrays at compile time in C++

后端 未结 3 1349
囚心锁ツ
囚心锁ツ 2021-02-03 16:21

I was wondering if its possible to make the following answer more generic, in the sense that the type of the array be templated instead of just unsigned:

I\'ve enclosed

相关标签:
3条回答
  • 2021-02-03 16:52

    It helps if you indent the struct. The problem is that you are defining the data static member variable inside the Array struct. But it should be at namespace scope:

    template<typename ArrayType>
    struct Array
    {
        template<ArrayType... args> struct ArrayHolder {
            static const ArrayType data[sizeof...(args)];
        };
    
        template<size_t N, template<size_t> class F, ArrayType... args> 
            struct generate_array_impl {
                typedef typename generate_array_impl<N-1, F, F<N>::value, args...>::result result;
            };
    
        template<template<size_t> class F, ArrayType... args> 
            struct generate_array_impl<0, F, args...> {
                typedef ArrayHolder<F<0>::value, args...> result;
            };
    
        template<size_t N, template<size_t> class F> 
            struct generate_array {
                typedef typename generate_array_impl<N-1, F>::result result;
            };
    };
    
    template<typename ArrayType> template<ArrayType... args> 
            const ArrayType Array<ArrayType>::ArrayHolder<args...>::data[sizeof...(args)] = { args... };
    
    0 讨论(0)
  • 2021-02-03 16:56

    I don't think the expression like 'template ' is a valid usage of C++11 variadic templates.

    It can be of two forms as I understand:

    1. template <typename... args> : variable number of generic type parameters
    2. template <int... args> : variable number of integer(non-type) parameters

    Refer to this wikipedia article for variadic templates.

    0 讨论(0)
  • 2021-02-03 16:59

    Erm... Why don't you just use std::vector? Or if you want a non-resiable array, then use the equivalent type in boost?

    0 讨论(0)
提交回复
热议问题