在宏中使用数组文字

问题描述 投票:0回答:1

我有一个这样的结构:

typedef struct {
  int num_files;
  audio_file files[];
} message_files;

我想创建一个宏,这样我就不必指定静态已知数组的文件数量:

#define FILES(arr) {sizeof((audio_file []) arr) / sizeof(audio_file), arr}

message_files files[1] = {
  FILES({{1,500}, {2,500}})
};

但这不起作用:我明白了

error: macro "FILES" passed 4 arguments, but takes just 1
。 如何使宏接受数组文字?

c++ macros
1个回答
1
投票

你的代码绝对是“C”风格的方法,在 C++20 中我会这样做:

#include <array>
#include <string_view>
#include <concepts>

struct audio_file_t
{
    int id;
    std::string_view name;
};

int main()
{
    constexpr auto files = std::to_array<audio_file_t>({{ 1, "file1" }, { 2, "file2" }});
    static_assert(files.size() == 2);
}
© www.soinside.com 2019 - 2024. All rights reserved.