incremented define?

前端 未结 4 1471
遥遥无期
遥遥无期 2021-01-13 15:48

Is there anyways to have a define increment every time you use it?

For example

int a = ADEFINE;
int b = ADEFINE;

a is 1 and b is 2.

相关标签:
4条回答
  • 2021-01-13 16:06

    Why not use __LINE__? It's standard C89/C99/C++.

    0 讨论(0)
  • 2021-01-13 16:10

    You can use __COUNTER__, though it's not standard. Both MSVC++ and GCC support it.


    If you can use boost, the pre-processor library has an implementation of counter. Here's the example from the documentation:

    #include <boost/preprocessor/slot/counter.hpp>
    
    BOOST_PP_COUNTER // 0
    
    #include BOOST_PP_UPDATE_COUNTER()
    
    BOOST_PP_COUNTER // 1
    
    #include BOOST_PP_UPDATE_COUNTER()
    
    BOOST_PP_COUNTER // 2
    
    #include BOOST_PP_UPDATE_COUNTER()
    
    BOOST_PP_COUNTER // 3
    

    (Kudo's to gf)

    0 讨论(0)
  • 2021-01-13 16:17
    static int PUT_AN_UNUSED_NAME_HERE = 0;
    #define ADEFINE (++PUT_AN_UNUSED_NAME_HERE)
    
    0 讨论(0)
  • 2021-01-13 16:31

    If you don't need compile-time-constants, you could do something like this to enumerate classes:

    int counter() {
        static int i = 0;
        return i++;
    }
    
    template<class T>
    int id() { 
        static int i = counter();
        return i; 
    };
    
    class A {};
    class B {};
    
    int main()
    {
        std::cout << id<A>() << std::endl;
        std::cout << id<B>() << std::endl;
    }
    
    0 讨论(0)
提交回复
热议问题