gpt4 book ai didi

c++ - 模板默认参数作为指向自身的指针

转载 作者:太空宇宙 更新时间:2023-11-04 16:00:45 25 4
gpt4 key购买 nike

我正在尝试开发一个通用树模板类,基本上代表相同节点的层次结构。它有两个模板参数,第一个是数据,第二个是引用另一个节点的类型(prev、next、parent、child)。默认情况下,我希望它是指向节点的常规指针,但出于我的目的,我还需要它是一些不同的东西(例如内存池中的整数索引)。下面的代码无法编译。本能地,我觉得可以做到,但我不知道怎么做。谁能提供对此的见解?

template <typename U, typename TPTR = TreeNode_t<U>*>
class TreeNode_t
{
public:
TPTR prev;
TPTR next;
TPTR parent;
TPTR children;
U m;
public:
TreeNode_t() : prev(0), next(0), parent(0){}
~TreeNode_t(){}
U &data() { return m; }
const U &data() const { return m; }
...

具体来说,一般来说我是这样实例化它的:

TreeNode_t<double> tree1;

但是,有时我会喜欢这样:

TreeNode_t<double, unsigned> tree2;

最佳答案

提供一个特殊的默认值作为 void 并在类中使用类型:

template <typename U, typename TPTR = void>
class TreeNode_t
{
using NodeType = std::conditional_t<std::is_same<void, TPTR>::value, TreeNode_t*, TPTR>;
public:
NodeType prev;
NodeType next;
NodeType parent;
NodeType children;
U m;
// ...
};

关于c++ - 模板默认参数作为指向自身的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44989676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com