- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在做一些模板元编程,大部分只是编写我自己的编译时间列表,但我也有一些预处理器魔法,如果可能的话,我想用它来使事情变得更容易。
我想做的是创建仿函数的编译时列表。该部分已完成,但用于简化创建(并添加到列表)的宏尚未完成。
一个简单的例子:
template<typename Functor, typename Tail>
struct node {
typedef Functor head;
typedef Tail tail;
};
template <typename Functor, typename Tail>
struct push_back {
typedef node<Functor, Tail> list;
};
struct unit0 {};
#define AUTO_FUNCTION(name) struct test_functor_##name { \
static void run_test(); \
}; \
typedef push_back< \
test_functor_##name, \
CONCAT(unit, PP_DEC(__COUNTER__)) \
>::list CONCAT(unit, __COUNTER__); \
void test_functor_##name::run_test()
AUTO_FUNCTION(hello) {
...
}
现在,这是可行的,因为我已经为 PP_DEC 创建了大量预处理器宏,即:
#define PP_DEC(x) PP_DEC_I(x)
#define PP_DEC_I(x) PP_DEC_ ## x
#define PP_DEC_1 0
#define PP_DEC_2 1
...
#define PP_DEC_N N
这是我真正想避免的部分,也是我问这个问题的原因。有没有人建议我如何在不增加其值(value)的情况下使用 COUNTER,或者我可以通过其他方式完成类似于以下的计数模式:
0 1
1 2
2 3
...
当然也欢迎改变 push_back 等语义的建议 :)。
附言。这不是为了生产,只是为了好玩。所以欢迎 GCC 特定的扩展。
PPS。我试图避免外部依赖,例如 boost,因为我想了解我正在做的一切(这个项目的重点)。
最佳答案
您可以使用额外的宏“修复”__COUNTER__
值:
#define MY_MACRO MY_MACRO_COUNTED(__COUNTER__)
#define MY_MACRO_COUNTED(counter) counter + counter
关于c++ - 可重复使用的预处理器 __COUNTER__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4719568/
如果我们使用 __COUNTER__在两个不同的源文件中,该值将重置为零。是否可以制作 __COUNTER__范围全局? 文件:file1.c int x=__COUNTER__; int y=__C
我看到这个问题: How to generate random variable names in C++ using macros? 回答如下:https://stackoverflow.com/a
我的电脑上安装了两个版本的 C++ 编译器。其中一个可以识别 __COUNTER__ 宏,而另一个则不能。在做了一些研究以使程序在两者中编译之后,我还没有遇到 __COUNTER__ 的宏定义。这是编
我正在做一些模板元编程,大部分只是编写我自己的编译时间列表,但我也有一些预处理器魔法,如果可能的话,我想用它来使事情变得更容易。 我想做的是创建仿函数的编译时列表。该部分已完成,但用于简化创建(并添加
我有一段代码使用 __COUNTER__ 宏来为变量生成唯一的名称。 此代码可移植吗?我知道 GCC 和 MSVS 支持它。其他编译器呢?宏是由标准定义的吗(据我所知,在 C++14 之前它不是)。
我正在尝试使用 __COUNTER__ 宏在我的代码中生成唯一的变量名。但是宏似乎不起作用。我可能以错误的方式使用它。请就我做错的地方向我提供指示或建议。 #define DUMB_MACRO() h
我想生成对编写单元测试用例有用的不同命名函数。我想这样做基本上是为了给每个单元测试用例赋予唯一的名称。 我正在使用 google 测试框架 编写单元测试用例。我必须使用 TEST_Macro 来编写单
我在玩预处理器和 c。尝试实现我自己的事件和层次结构系统。但是我遇到了一个问题。我正在尝试静态定义可以初始化的“模块”,以及一些预先静态定义的事件。对于我使用的事件,COUNTER 效果很好。但我不想
我想对 __COUNTER__ 进行字符串化并将其打印为字符串而不是整数,这可能吗? printf("%s\n", #__COUNTER__); 下面的方法我都试过了,还是不行 hello.c:6:1
我有一个执行类似于以下操作的宏: #define MAKE_VALS(...) \ int val1 = 0; \ int val2 = 0; \ : if(val1
我正在尝试编写一个宏,它将每个源文件仅扩展一次 __COUNTER__ 宏。我完全理解宏是如何处理它们的扩展的,但我在这个方面遇到了困难。我想在文件顶部扩展一次 __COUNTER__ 宏,然后对该定
我正在将一个项目从 Linux 迁移到 Xcode,我遇到了“版本”问题。 我在编译时需要一个唯一标识符来处理我的动态内容,在 linux 上我使用的是 __ COUNTER__ 预处理器,但似乎 X
是否可以在头文件的开头重置 __COUNTER__ 宏,使其在头文件中的计算在多个编译单元上保持一致? 最佳答案 枚举怎么样? enum { COUNTER_BASE = __COUNTER__ };
我目前在我的 C 库代码中使用 __COUNTER__ 宏来生成唯一的整数标识符。它运行良好,但我看到两个问题: 它不属于任何 C 或 C++ 标准。 也使用 __COUNTER__ 的独立代码可能会
__COUNTER__ 符号由 VC++ 提供和 GCC,每次使用都会给出一个递增的非负整数值。 我有兴趣了解是否有人使用过它,以及它是否值得标准化? 最佳答案 __COUNTER__ 在您需要唯一名
这个问题在这里已经有了答案: Does C++ support compile-time counters? (11 个答案) 关闭 6 年前。 我有一组 C++ 类,每个类都必须声明一个唯一的顺序
我需要在编译时在整个代码中生成一系列序列号。我以这样的方式尝试了“__COUNTER__”: void test1() { printf("test1(): Counter = %d\n", __
在this presentation 在 00:19:00 左右,Andrei Alexandrescu 解释了他的 SCOPE_EXIT 宏的实现。他在堆栈上创建了一个 ScopeGuard 对象,
我遇到以下关于 __COUNTER__ 的词: Care must be taken to ensure that __COUNTER__ is not expanded prior to inclu
首先,让我从我正在尝试做的事情开始。我正在开发一个库,它可以更轻松地将 Python 解释器嵌入到 C++ 代码中,并且我想利用一些 C++11 功能。我大量使用 std::functions,这是一
我是一名优秀的程序员,十分优秀!