每次使用时都有定义增量吗?
例如
int a = ADEFINE; int b = ADEFINE;
a为1,b为2。
答案 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 ++。