【问题标题】:confusing define directive in c++ projectc++ 项目中令人困惑的定义指令
【发布时间】:2020-06-04 15:46:47
【问题描述】:

我试图弄清楚我遇到的这段代码是做什么的,但似乎不太明白它是如何工作的。

#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 中不同编解码器类的构造函数来将不同类型的编解码器添加到无序映射中。我不确定这是否是它唯一能做的事情。它还有其他用途吗?

【问题讨论】:

  • 标题与你最后的问题不符,真正的问题是什么?代码不完整,因此即使尝试回答您的问题也几乎是不可能的。我们如何提出建议?听起来您了解 define 指令的作用,那么您在寻找什么?

标签: c++ preprocessor codec


【解决方案1】:

宏扩展为变量声明(如果使用得当),可能用于创建全局变量。

变量类型为codec_creator,名称基于使用## preprocessor operator 传递给宏的特定classname(无符号短数字)和type 值。变量的构造函数调用将传递classname 值和type 的新构造对象。然后,此构造函数将此类对象指针存储在 g_creator_map 映射中。宏构造的变量将具有最小的大小,因为该类没有成员变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-20
    • 2018-02-20
    • 2019-04-25
    • 2016-03-16
    • 1970-01-01
    • 2022-01-21
    • 2022-01-17
    相关资源
    最近更新 更多