C++ 定义宏以从一个值创建两个参数

C++ 定义宏以从一个值创建两个参数,c++,macros,mfc,C++,Macros,Mfc,我有这样的定义: using ToolTipMap = std::map<UINT, UINT>; using ToolTipPair = std::pair<UINT, UINT>; 如何简化这一点: IDC_COMBO_WATCHTOWER_DAY, IDS_COMBO_WATCHTOWER_DAY 因此,我只指定: COMBO_WATCHTOWER_DAY 它展开成两个宏 我看到: #将参数转换为文本字符串 ##组合了两个参数 因此: 例如,您可以使用s

我有这样的定义:

using ToolTipMap = std::map<UINT, UINT>;
using ToolTipPair = std::pair<UINT, UINT>;
如何简化这一点:

IDC_COMBO_WATCHTOWER_DAY, IDS_COMBO_WATCHTOWER_DAY
因此,我只指定:

COMBO_WATCHTOWER_DAY
它展开成两个宏


我看到:

  • #
    将参数转换为文本字符串
  • ##
    组合了两个参数
因此:


例如,您可以使用
std::map::emplace
简化代码

ToolTipMap.emplace(1, 2);
或者使用
ToolTipMap.insert({1,2})以避免使用
std::pair

使用
#定义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;
}
#包括
#包括
#定义IDC_X1 1
#定义id_X1 1000
#定义IDC_X2 2
#定义IDS_X2 2000
int main()
{
地图工具图;
#定义foo(x)IDC###x,IDS##x
工具提示图安放(foo(X1));
工具提示图安放(foo(X2));
#undef foo
用于(常数自动&e:ToolTimp)
标准::cout
ToolTipMap.emplace(1, 2);
#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;
}