64,676
社区成员
发帖
与我相关
我的任务
分享
template<int> struct A{};
int main()
{
A<__COUNTER__> a; // 标准累加器,编译时作常量处理
// A<MY_COUNTER__> b; // 如何作一个自己的累加器,也可作常量处理
}
//MY_COUNTER_INC.h
#ifndef MY_COUNTER_INC_h_1
#define MY_COUNTER_INC_h_1
#define MY_COUNTER 1
#else
#ifndef MY_COUNTER_INC_h_2
#define MY_COUNTER_INC_h_2
#undef MY_COUNTER
#define MY_COUNTER 2
#else
#ifndef MY_COUNTER_INC_h_3
#define MY_COUNTER_INC_h_3
#undef MY_COUNTER
#define MY_COUNTER 3
#else
static_assert(false, "MY_COUNTER OUT OF RANGE");
#endif
#endif
#endif
// main.cpp
template<int V_>
struct CV
{
int v;
CV() :v(V_){};
};
#include "MY_COUNTER_INC.h"
CV<MY_COUNTER> cv1;
#include "MY_COUNTER_INC.h"
CV<MY_COUNTER> cv2;
int _tmain(int argc, _TCHAR* argv[])
{
#include "MY_COUNTER_INC.h"
CV<MY_COUNTER> cv3;
int a =cv1.v;
int b =cv2.v;
int c =cv3.v;
getchar();
return 0;
}
// #pragma push (__COUNTER__)
// __COUNTER__ = 0;
// #pragma pop(__COUNTER__)