来自其他文件的c++初始化列表

C++ initializer list from other file

本文关键字:c++ 初始化 列表 文件 其他      更新时间:2023-10-16

我有一个关于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列表中调用方法,但只是为了清楚我想做什么)

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

p。我知道在c++中以这种方式使用const数组是很难看的,但我在c++项目中包含了一个c库,我没有时间完全重写c库。

提前感谢!

您是否考虑过以下几点:

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"
{}