gpt4 book ai didi

c++ - 从一个值创建两个参数的宏定义

转载 作者:搜寻专家 更新时间:2023-10-31 02:06:52 25 4
gpt4 key购买 nike

我有这样的定义:

using ToolTipMap = std::map<UINT, UINT>;
using ToolTipPair = std::pair<UINT, UINT>;

我是这样使用的:

ToolTipMap mapToolTips;
mapToolTips.insert(ToolTipPair(IDC_COMBO_WATCHTOWER_DAY, IDS_COMBO_WATCHTOWER_DAY));
mapToolTips.insert(ToolTipPair(IDC_COMBO_SCHOOL_DAY, IDS_COMBO_SCHOOL_DAY));
mapToolTips.insert(ToolTipPair(IDC_EDIT_DATE_FORMAT, IDS_EDIT_DATE_FORMAT));
mapToolTips.insert(ToolTipPair(IDC_CHECK_USE_CUSTOM_DATE, IDS_CHECK_USE_CUSTOM_DATE));
mapToolTips.insert(ToolTipPair(IDC_CHECK_PLATFORM, IDS_CHECK_PLATFORM));
mapToolTips.insert(ToolTipPair(IDC_CHECK_PLATFORM_MIKE, IDS_CHECK_PLATFORM_MIKE));
mapToolTips.insert(ToolTipPair(IDC_COMBO_NUM_MIKE_USERS, IDS_COMBO_NUM_MIKE_USERS));
mapToolTips.insert(ToolTipPair(IDC_COMBO_NUM_SOUND_USERS, IDS_COMBO_NUM_SOUND_USERS));
mapToolTips.insert(ToolTipPair(IDC_COMBO_NUM_ATTEND, IDS_COMBO_NUM_ATTEND));
mapToolTips.insert(ToolTipPair(IDC_BUTTON_HELP, IDS_BUTTON_HELP));
mapToolTips.insert(ToolTipPair(IDC_COMBO_REPORT_MODE, IDS_COMBO_REPORT_MODE));
mapToolTips.insert(ToolTipPair(IDC_COMBO_WEEKLY_DAY, IDS_COMBO_WEEKLY_DAY));

如何简化这一点:

IDC_COMBO_WATCHTOWER_DAY, IDS_COMBO_WATCHTOWER_DAY

所以我只指定:

COMBO_WATCHTOWER_DAY

然后用宏扩展成两个?


我看到了:

  • # 将参数转换为文本字符串
  • ## 合并两个参数

所以:

TOOLTIP(a) _T(“IDC_”)#a _T(“IDS_”)#a

最佳答案

可以使用std::map::emplace来简化代码,例子

ToolTipMap.emplace(1, 2);

或使用 ToolTipMap.insert({ 1, 2 }); 来避免需要 std::pair

使用 #define foo(x) IDC_##x, IDS_##x 作为 IDC_x, IDS_x 的快捷方式

#include <iostream>
#include <map>

#define IDC_X1 1
#define IDS_X1 1000

#define IDC_X2 2
#define IDS_X2 2000

int main()
{
std::map<int, int> ToolTipMap;

#define foo(x) IDC_##x, IDS_##x
ToolTipMap.emplace(foo(X1));
ToolTipMap.emplace(foo(X2));
#undef foo

for (const auto &e : ToolTipMap)
std::cout << e.first << ", " << e.second << "\n";

return 0;
}

如果您没有更多这些常量,我建议您保留代码原样。您可以只复制/粘贴行而无需复杂的宏。最终代码大小将相同,因此不会有任何收获或损失。

关于c++ - 从一个值创建两个参数的宏定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49602724/

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