错误:不允许转换为不完整的数组类型“ int []”

时间:2018-12-20 16:05:48

标签: c++

我想获取 VA_ARGS

的长度

我使用了这个问题的答案https://stackoverflow.com/a/2124433/7388699,但如果不起作用!

#define PIN_ARRAY_LENGTH(...) ((size_t)(sizeof((int[]){__VA_ARGS__})/sizeof(int)))

size_t c = PIN_ARRAY_LENGTH(1, 5, 7, 9);

我也尝试过

size_t x = sizeof((int[]){ 1, 6, 8 }) / sizeof(int);

它无法编译,但出现错误:强制转换为不完整的数组类型“ int []”

2 个答案:

答案 0 :(得分:1)

不可能使用复合文字,但是您可以通过typedef创建所需的数组右值:

using int_c_array = int[];

#define count_args(...) \
    (sizeof(int_c_array {__VA_ARGS__}) / sizeof(int))

答案 1 :(得分:1)

Quentinanswer的变化:

#define NUM(...) (std::tuple_size<decltype(std::make_tuple(__VA_ARGS__))>::value)

这不需要别名,并且可以使用任意类型:

size_t n = NUM(7, 10.12, "hello world");