根据C ++标准 n3376 ,以下代码格式不正确。
using cell = pair<void*, cell*>; // ill-formed
有没有办法实现cell
,这是一个合理的数据结构,而没有在C ++中定义新的cell
类?
答案 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*> { };
如果您需要cell
与std::pair<void*,cell*>
属于同一类型,则可以在重要的位置将前者强制转换为后者。
答案 2 :(得分:0)
另一种选择可能是使用
using cell = pair<void*, void*>;
然后在必要时将第二个元素转换为正确的类型。你可以为它编写一个函数,比如
cell& get_cell(cell& x) {
return *static_cast<cell*>(x.second);
}