gpt4 book ai didi

c++ - C++ 中的 const 数组初始化,没有初始大小

转载 作者:行者123 更新时间:2023-11-28 02:46:46 25 4
gpt4 key购买 nike

我在父类中有一个方法可以执行此操作:

HWND SppTab::CreateToolTip(HWND hDlg)
{
LRESULT added, active;
const int Controls[] = {
/* Audio Tab (IDD_AUDIO ) */
IDC_AUD_AUTO, IDC_AUD_8, IDC_AUD_16, IDC_CH_AUTO, IDC_LEFT, IDC_RIGHT, IDC_LEVEL_L, IDC_LEVEL_R, IDC_LEVEL_M,

/* Transmitter Tab (IDD_DECODE) */
IDC_DEC_AUTO, IDC_BTN_SCAN, IDC_LIST_PPM, IDC_LIST_PCM,
IDC_CH1, IDC_CH2, IDC_CH3, IDC_CH4, IDC_CH5, IDC_CH6, IDC_CH7, IDC_CH8, IDC_CH9, IDC_CH10, IDC_CH11, IDC_CH12, IDC_CH13, IDC_CH14, IDC_CH15, IDC_CH16
};

// Loop on all controls that require tooltip
for (auto ctrl : Controls)
{
HWND hwndTool = GetDlgItem(hDlg, ctrl);
toolInfo.uId = (UINT_PTR)hwndTool;
added = SendMessage(m_hwndToolTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);
active = SendMessage(m_hwndToolTip, TTM_ACTIVATE, TRUE, (LPARAM)&toolInfo);
};
}

return m_hwndToolTip;
}

派生方法之间的唯一区别是数组 Controls[] 的内容。似乎数组应该是派生类的成员,并且将以不同方式进行初始化。请注意,数组大小不是固定的。

如何初始化作为类成员的数组?我知道我可以定义全局数组(为每个类)并在构造函数中分配它们。这是最好的方法吗?

++++++++++++++++++++++++ 编辑+++++++++++++++++++++++++

好吧,你总是可以定义一个global数组const int g_RawBarId[] =
{IDC_CH1,IDC_CH2,IDC_CH3,IDC_CH4,IDC_CH5,IDC_CH6,IDC_CH7,IDC_CH8,\
IDC_CH9,IDC_CH10,IDC_CH11,IDC_CH12,IDC_CH13,IDC_CH14,IDC_CH15,IDC_CH16};
然后将其分配给构造函数中的 vector :m_vRawBarId(g_RawBarId, g_RawBarId+sizeof(g_RawBarId)/sizeof(int))但是,使用全局变量感觉就像打破了 OO 游戏的规则。如果您有更好的想法 - 一个示例将是无价的。

最佳答案

由于您的数组似乎是常量数据,仅用于控制 CreateToolTip() 的作用,因此最谨慎的方法是将两个(或更多)数组定义为静态常量和在 CreateToolTip() 中使用指向一个或另一个的指针。

这样您就可以避免不必要的数据复制、不必要的数组初始化、不必要的内存分配以及尝试处理可变数组大小的不必要的麻烦。

关于c++ - C++ 中的 const 数组初始化,没有初始大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24165963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com