Click here to Skip to main content
15,897,187 members
Articles / Programming Languages / C++

Enumerator Lists and Enumerated Arrays

Rate me:
Please Sign up or sign in to vote.
4.60/5 (9 votes)
4 Oct 2011CPOL11 min read 59.2K   464   15  
Establishing a strong binding between enumerations and arrays
// This file is part of EnumeratorLib
// Copyright: Andreas Raczek
// This file is published under the The Code Project Open License (CPOL) 
// See the file "CPOL.html" for the full license governing this code. 
#pragma once

namespace lobster {

namespace enm {

// template shortcuts for list<tail<?>, ?> combinations
// variadic templates would be great here ...


template<typename tail, typename tail::enum_type v1> 
struct list_1 {
    typedef list<tail, v1> value;
};

template<typename tail, typename tail::enum_type v1, typename tail::enum_type v2> 
struct list_2 {
    typedef list<typename list_1<tail, v1>::value, v2> value;
};

template<typename tail, typename tail::enum_type v1, typename tail::enum_type v2, typename tail::enum_type v3> 
struct list_3 {
    typedef list<typename list_2<tail, v1, v2>::value, v3> value;
};

template<typename tail, typename tail::enum_type v1, typename tail::enum_type v2, typename tail::enum_type v3, typename tail::enum_type v4> 
struct list_4 {
    typedef list<typename list_3<tail, v1, v2, v3>::value, v4> value;
};

template<typename tail, typename tail::enum_type v1, typename tail::enum_type v2, typename tail::enum_type v3, typename tail::enum_type v4, typename tail::enum_type v5> 
struct list_5 {
    typedef list<typename list_4<tail, v1, v2, v3, v4>::value, v5> value;
};

template<typename tail, typename tail::enum_type v1, typename tail::enum_type v2, typename tail::enum_type v3, typename tail::enum_type v4, typename tail::enum_type v5, typename tail::enum_type v6> 
struct list_6 {
    typedef list<typename list_5<tail, v1, v2, v3, v4, v5>::value, v6> value;
};

template<typename tail, typename tail::enum_type v1, typename tail::enum_type v2, typename tail::enum_type v3, typename tail::enum_type v4, typename tail::enum_type v5, typename tail::enum_type v6, typename tail::enum_type v7> 
struct list_7 {
    typedef list<typename list_6<tail, v1, v2, v3, v4, v5, v6>::value, v7> value;
};

template<typename tail, typename tail::enum_type v1, typename tail::enum_type v2, typename tail::enum_type v3, typename tail::enum_type v4, typename tail::enum_type v5, typename tail::enum_type v6, typename tail::enum_type v7, typename tail::enum_type v8> 
struct list_8 {
    typedef list<typename list_7<tail, v1, v2, v3, v4, v5, v6, v7>::value, v8> value;
};

template<typename tail, typename tail::enum_type v1, typename tail::enum_type v2, typename tail::enum_type v3, typename tail::enum_type v4, typename tail::enum_type v5, typename tail::enum_type v6, typename tail::enum_type v7, typename tail::enum_type v8, typename tail::enum_type v9> 
struct list_9 {
    typedef list<typename list_8<tail, v1, v2, v3, v4, v5, v6, v7, v8>::value, v9> value;
};

template<typename tail, typename tail::enum_type v1, typename tail::enum_type v2, typename tail::enum_type v3, typename tail::enum_type v4, typename tail::enum_type v5, typename tail::enum_type v6, typename tail::enum_type v7, typename tail::enum_type v8, typename tail::enum_type v9, typename tail::enum_type v10> 
struct list_10 {
    typedef list<typename list_9<tail, v1, v2, v3, v4, v5, v6, v7, v8, v9>::value, v10> value;
};

}

}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
Germany Germany
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions