在 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 没有成员变量。