如何使用c ++代码中的“c-style flags enum”?

时间:2016-09-19 09:26:21

标签: c++ enums

来自this c code

ef_vi_alloc_from_pd函数接受枚举作为最后一个参数:

int ef_vi_alloc_from_pd(ef_vi* vi, ef_driver_handle vi_dh,
            struct ef_pd* pd, ef_driver_handle pd_dh,
            int evq_capacity, int rxq_capacity, int txq_capacity,
            ef_vi* evq_opt, ef_driver_handle evq_dh,
            enum ef_vi_flags flags)

this c example中,我们将标记定义为unsigned vi_flags并且它可以正常工作:

  unsigned vi_flags;
  vi_flags = EF_VI_FLAGS_DEFAULT;
  if( cfg_timestamping )
    vi_flags |= EF_VI_RX_TIMESTAMPS;
  TRY(ef_vi_alloc_from_pd(&res->vi, res->dh, &res->pd, res->dh,
                          -1, -1, 0, NULL, -1, vi_flags));

但是在c ++中它不起作用,我在调用ef_vi_alloc_from_pd时遇到编译错误error: invalid conversion from ‘unsigned int’ to ‘ef_vi_flags’ [-fpermissive]

我试图将vi_flags定义为枚举:

enum ef_vi_flags vi_flags;
vi_flags = EF_VI_FLAGS_DEFAULT;
vi_flags |= EF_VI_RX_TIMESTAMPS;

但是当我做“| =”error: invalid conversion from ‘int’ to ‘ef_vi_flags’ [-fpermissive]

时,这也不能编译

如何使用c ++中的ef_vi_alloc_from_pd

  • 如何声明vi_flags以及如何致电ef_vi_alloc_from_pd
  • 如何“| =”vi_flags
  • 向编译器添加任何选项?

1 个答案:

答案 0 :(得分:2)

您可以这样做:

ef_vi_flags vi_flags = ef_vi_flags(EF_VI_FLAGS_DEFAULT | EF_VI_RX_TIMESTAMPS);