如何实现编译期的累加器?

GKatHere 2017-03-24 11:37:47
如题:如何实现编译期的累加器?
编译期的累加器: 我指,此累加器当时的值能够在编译时当作常量处理
例:

template<int> struct A{};
int main()
{
A<__COUNTER__> a; // 标准累加器,编译时作常量处理
// A<MY_COUNTER__> b; // 如何作一个自己的累加器,也可作常量处理
}


另外,哪位大神给个C币换积分的链接,以前找得到,忽然找不到了
...全文
179 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
唯恐天下不乱 2017-03-24
  • 打赏
  • 举报
回复
估计得要编译器支持了。 楼主要干嘛? 说清编译器,我记得VS无解
幻夢之葉 2017-03-24
  • 打赏
  • 举报
回复
vnvlyp 2017-03-24
  • 打赏
  • 举报
回复
你可能需要定制的预编译器
GKatHere 2017-03-24
  • 打赏
  • 举报
回复
实现了个文件级别的累加器。 ......是真正的“文件级别”

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

GKatHere 2017-03-24
  • 打赏
  • 举报
回复
一楼朋友,谢了。
引用 2 楼 shit_moment 的回复:
估计得要编译器支持了。 楼主要干嘛? 说清编译器,我记得VS无解
私人累加器,这个用途广。 不知道如何修性 标准__COUNTER__的当时值? 如:类似于

//  #pragma push (__COUNTER__)
// __COUNTER__ = 0;
//  #pragma pop(__COUNTER__)

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧