【发布时间】: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