C ++:tag / trait模板:确保标签只绑定一次

时间:2014-02-04 20:27:06

标签: c++ templates template-meta-programming

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

我正在开发一个帮助库来处理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>无法一起编译。我想知道这是否可行。也许我可以使用提升MPL的东西吗?我试图避免的一件事是宏。此外,不幸的是,C ++ 11是不可能的。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

所以我不得不承认我的问题没有答案。似乎没有办法在纯c ++中实现我想要的东西。