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

标签 c++ arrays derived-class

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

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/

相关文章:

c++ - 在 C++ 中从 PNG 中读取 RGB 值

javascript - GatsyJS、GraphQL - 通过数组发布映射。

c# - 在其基类上调用类的方法

haskell - 使用量化约束导出 Ord (forall a. Ord a => Ord (f a))

c++ - 关于为模板提供默认类型的问题

c++ - 如何在 C++ 中将 unicode 代码点转换为 utf-8?

javascript - 如何通过已知点数组插入某些数据点中的值?

php - 从 SQL 结果中过滤大数组

c++ - 将派生对象传递给模板

c++ - 按 int 读入文件,然后是单词