最近需要使用宏定义来简化代码
可变参数宏定义
#include <iostream>
#include <stdio.h>
#define DEBUG(...) printf(__VA_ARGS__)
int main()
{
DEBUG("Paras=%s\n", "haha");
return 0;
}
获取可变参数列表的大小和值
有个需求需要使用宏传入一个参数列表,然后在宏定义中读取每个参数。下面的方法可以获取列表大小,但还没办法获取到每个参数的值。后面想了一下,是不可能遍历获取传进来每个参数的值。
因为,宏是在预编译阶段起作用。而函数中的变量是在运行时值才有意义。不可能在编译阶段使用运行时的 index。
#include <iostream>
#include <stdio.h>
#include <tuple>
using namespace std;
#define CONFIG_FUNCTION(...) int SetValue(){\
int arg_len = tuple_size<decltype(make_tuple(__VA_ARGS__))>::value;\
auto t = make_tuple(__VA_ARGS__);\
cout << arg_len << endl;\
cout << get<0>(t) << endl;\
cout << get<1>(t) << endl;\
cout << get<2>(t) << endl;\
for (int i=0; i< arg_len; i++) {\
}\
}
#define DEBUG(...) printf(__VA_ARGS__[10])
CONFIG_FUNCTION("a", "b", "c", "d", "e");
int main()
{
SetValue();
return 0;
}