如何使用`using cell = pair <void *,cell * =“”>`来定义一个单元格等价物?

时间:2018-03-27 03:43:10

标签: c++

根据C ++标准 n3376 ,以下代码格式不正确。

using cell = pair<void*, cell*>; // ill-formed

有没有办法实现cell,这是一个合理的数据结构,而没有在C ++中定义新的cell类?

3 个答案:

答案 0 :(得分:2)

以(相当一部分)可读性为代价,您可以使用自定义pair和一些专业化来实现类似的东西

struct self {};

template<typename F, typename S>
struct pair
{
    F first;
    S second;

    // ...
};

template<typename F>
struct pair<F, self*> : pair<F, pair*>
{
};

你写了

using cell = pair<void*, self*>;

答案 1 :(得分:1)

据我所知,你唯一的选择是继承,即

struct cell : std::pair<void*,cell*> { };

如果您需要cellstd::pair<void*,cell*>属于同一类型,则可以在重要的位置将前者强制转换为后者。

答案 2 :(得分:0)

另一种选择可能是使用

using cell = pair<void*, void*>;

然后在必要时将第二个元素转换为正确的类型。你可以为它编写一个函数,比如

cell& get_cell(cell& x) {
  return *static_cast<cell*>(x.second);
}