我想知道是否有可能在宏参数上编写宏foreach.这是想做的事情:
#define PRINT(a) printf(#a": %d", a)
#define PRINT_ALL(...) ? ? ? THE PROBLEM ? ? ?
Run Code Online (Sandbox Code Playgroud)
可能的用法:
int a = 1, b = 3, d = 0;
PRINT_ALL(a,b,d);
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所取得的成就
#define FIRST_ARG(arg,...) arg
#define AFTER_FIRST_ARG(arg,...) , ##__VA_ARGS__
#define PRINT(a) printf(#a": %d", a)
#define PRINT_ALL PRINT(FIRST_ARG(__VA_ARGS__)); PRINT_ALL(AFTER_FIRST_ARG(__VA_ARGS__))
Run Code Online (Sandbox Code Playgroud)
这是一个递归宏,这是非法的.另一个问题是stop condition递归.
我有以下情况:假设我有一堆类型(仿函数),我想在编译期间注册/编译,最好是像boost :: mpl :: vector.你知道这么做的诀窍吗?
我的愿望是拥有实现仿函数类型和注册文件的hpp文件,其中宏将类型引入编译.
例如
// registered.hpp
REGISTER("functor1.hpp") // implementation
REGISTER("functor2.hpp")
...
boost::mpl::vector<...> types; // full registration vector
Run Code Online (Sandbox Code Playgroud)
希望这是有道理的.谢谢