递增定义?

时间:2010-01-16 08:52:11

标签: c++ visual-studio-2008

每次使用时都有定义增量吗?

例如

int a = ADEFINE;
int b = ADEFINE;

a为1,b为2。

4 个答案:

答案 0 :(得分:11)

您可以使用__COUNTER__,但这不是标准。 MSVC ++和GCC都支持它。


如果你可以使用boost,pre-processor library有一个counter的实现。以下是文档中的示例:

#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)

答案 1 :(得分:4)

如果你不需要编译时常量,你可以这样做来枚举类:

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;
}

答案 2 :(得分:2)

static int PUT_AN_UNUSED_NAME_HERE = 0;
#define ADEFINE (++PUT_AN_UNUSED_NAME_HERE)

答案 3 :(得分:0)

为什么不使用__LINE__?它是标准的C89 / C99 / C ++。