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;
}