在 C++ 项目中混淆定义指令
confusing define directive in c++ project
我想弄清楚我遇到的这段代码的作用,但似乎不太明白它是如何工作的。
#define CODEC_BIND(classname, type) codec_creator cc_##classname##_##type ((type), new classname());
codec_creator 是一个 class,它将特定的编解码器分配给构造函数中的无序映射,如下所示。
extern std::unordered_map <unsigned short, std::shared_ptr<codec>> g_creator_map;
class codec_creator
{
public:
codec_creator(unsigned short pt, codec* c)
{
g_creator_map[pt] = std::shared_ptr<codec>(c);
}
};
如我所见,CODEC_BIND用于通过为不同的编解码器class调用codec_creator中的构造函数来将不同类型的编解码器添加到无序映射中。我不确定这是否是它唯一做的事情。它还有其他用途吗?
宏扩展为变量声明(如果使用得当),可能用于创建全局变量。
变量类型为 codec_creator
,名称基于使用 [=17] 传递给宏的特定 classname
(无符号短数字)和 type
值=].变量的构造函数调用将传递 classname
值和 type
的新构造对象。然后,此构造函数会将此 class 对象指针存储在 g_creator_map
映射中。由宏构造的变量将具有最小大小,因为 class 没有成员变量。
我想弄清楚我遇到的这段代码的作用,但似乎不太明白它是如何工作的。
#define CODEC_BIND(classname, type) codec_creator cc_##classname##_##type ((type), new classname());
codec_creator 是一个 class,它将特定的编解码器分配给构造函数中的无序映射,如下所示。
extern std::unordered_map <unsigned short, std::shared_ptr<codec>> g_creator_map;
class codec_creator
{
public:
codec_creator(unsigned short pt, codec* c)
{
g_creator_map[pt] = std::shared_ptr<codec>(c);
}
};
如我所见,CODEC_BIND用于通过为不同的编解码器class调用codec_creator中的构造函数来将不同类型的编解码器添加到无序映射中。我不确定这是否是它唯一做的事情。它还有其他用途吗?
宏扩展为变量声明(如果使用得当),可能用于创建全局变量。
变量类型为 codec_creator
,名称基于使用 [=17] 传递给宏的特定 classname
(无符号短数字)和 type
值=].变量的构造函数调用将传递 classname
值和 type
的新构造对象。然后,此构造函数会将此 class 对象指针存储在 g_creator_map
映射中。由宏构造的变量将具有最小大小,因为 class 没有成员变量。