【问题标题】:C++ initializer list from other file来自其他文件的 C++ 初始化程序列表
【发布时间】:2015-12-14 07:48:15
【问题描述】:

我对 c++ 初始化程序列表有疑问。

我有一个带有 const 结构的类,需要在初始化器列表中进行初始化,因为它们是 const。这样可以完美地工作:

bglib::bglib()
    : ble_class_evt_handlers(   {{ble_class_system_evt_handlers,7},
                                {ble_class_flash_evt_handlers,1},
                                {ble_class_attributes_evt_handlers,3},
                                {ble_class_connection_evt_handlers,5},
                                {ble_class_attclient_evt_handlers,7},
                                {ble_class_sm_evt_handlers,5},
                                {ble_class_gap_evt_handlers,2},
                                {ble_class_hardware_evt_handlers,4},
                                {NULL,0},
                                {ble_class_dfu_evt_handlers,1},
                                } ),
      ble_class_rsp_handlers(   {{ble_class_system_rsp_handlers,18},
                                {ble_class_flash_rsp_handlers,9},
                                {ble_class_attributes_rsp_handlers,6},
                                {ble_class_connection_rsp_handlers,9},
                                {ble_class_attclient_rsp_handlers,12},
                                {ble_class_sm_rsp_handlers,8},
                                {ble_class_gap_rsp_handlers,11},
                                {ble_class_hardware_rsp_handlers,21},
                                {ble_class_test_rsp_handlers,7},
                                {ble_class_dfu_rsp_handlers,4},
                                }  )

{}

cpp 头文件包含以下内容:

const struct ble_class_handler_t ble_class_evt_handlers[ble_cls_last];
const struct ble_class_handler_t ble_class_rsp_handlers[ble_cls_last];

现在我的问题是:是否有任何可能的方法可以将 init 函数移动到另一个文件,我在 bglib 类的初始化程序列表中引用了该文件?例如,init 列表调用了一个初始化数组的方法(我知道不可能从 init 列表中调用方法,只是为了明确我想要做什么)

原因是我需要初始化更多这样的数组,我认为拥有一个包含数百行代码的初始化列表很难看。

PS。我知道在 C++ 中以这种方式使用 const 数组很难看,但我将 C 库包含到 C++ 项目中,而且我没有时间完全重写 C 库。

提前致谢!

【问题讨论】:

  • 也许你可以包含一个标题,#define 你的列表。
  • 你用的是什么编译器?我无法编译此代码:'bglib::ble_class_evt_handlers': array initialization requires a brace-enclosed initializer list
  • 我在Qt下使用MSVC10。

标签: c++ arrays constructor constants initializer


【解决方案1】:

您是否(会)考虑以下几点:

bglib::bglib(): 
   ble_class_evt_handlers( 
#include  "ble_class_evt_handlers_init.inc"
                         ),
  ble_class_rsp_handlers( 
#include  "ble_class_system_rsp_handlers_init.inc"
                        )
{}

或许

bglib::bglib() : 
#include "bglib_init.inc"
{}

【讨论】:

  • 我试过了,可惜没用。
猜你喜欢
  • 1970-01-01
  • 2023-03-19
  • 2019-10-23
  • 1970-01-01
  • 2013-10-21
  • 2021-10-09
  • 1970-01-01
相关资源
最近更新 更多