在C++项目中定义指令的混乱

问题描述 投票:0回答:1

我想弄清楚我遇到的这段代码是做什么的,但似乎不太能理解它的工作原理。

#define CODEC_BIND(classname, type) codec_creator cc_##classname##_##type ((type), new classname());

codec_creator是一个类,它在构造函数中把特定的编解码器分配给一个无序映射,如下图所示。

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是通过调用codec_creator中的构造函数为不同的编解码器类添加不同类型的编解码器到无序映射中。但我不确定这是否是它唯一的作用。它还有其他用途吗?

c++ preprocessor codec
1个回答
1
投票

该宏扩展为一个变量声明(使用得当时),可能用于创建全局变量。

变量类型是 codec_creator命名是基于特定的 classname (无符号短数)和 type 的值传递给宏,并使用 ## 预处理器运算符. 变量的构造函数调用将通过 classname 值和一个新构造的 type. 这个构造函数将把这个类对象指针存储在 g_creator_map map。宏构建的变量将具有最小的大小,因为该类没有成员变量。

© www.soinside.com 2019 - 2024. All rights reserved.