C :标签/特征模板:确保标签仅绑定一次

C++: tag/trait template: ensure tag is bound only once

本文关键字:标签 一次 绑定 确保 特征      更新时间:2023-10-16

标题可能太模糊了,我将解释我的意思。

我正在开发一个用于使用TLV编码值的助手库。在库中,每个值都保存一个标签ID,标签类型代码和标签值,以适当的本机类型。这种标记的值容器由在标签ID和关联类型特征上参数化的模板类实现(该类别的类型特征(该类型特征声明标记值的属性)。现在,我希望能够确保一个标签ID仅与一个性状相关联,以便我无法创建具有相同标签ID但不同数据类型的TLV值。因此,这是一种标签词汇,仅在编译时间检查。

template<uint_t TagId, typename Trait>
struct TagBinder
{
    enum { my_id = TagId };
    // stuff skipped
};

我想确保TagBinder<100, IntTrait>TagBinder<100, BoolTrait>不会一起编译。我想知道这是否有可能。Boost MPL中是否可以使用某些东西?我要避免的一件事是宏。另外,不幸的是,C 11是不可能的。

预先感谢您!

,所以我必须承认我的问题没有答案。似乎没有办法实现我想要的纯C 。