首页 > 解决方案 > 我们可以在模板参数中传递 self 一个默认参数吗?

问题描述

有没有办法将类本身作为默认值传递。

template<typename T, class NodeType>
class A: {
    public:
       virtual NodeType* foo() {}
};
template<typename T, class NodeType=B<T>>
class B: public A<T, NodeType> {
};

我正在为树制作一个通用节点。

BinaryTreeNode -> BSTNode -> AVLNode

标签: c++c++11

解决方案


template<typename T, class NodeType>
class A {
public:
   virtual NodeType* foo() {}
};
template<class T, class NodeType=void>
class B:
  public A<T, typename std::conditional<std::is_same<NodeType,void>::value,B<T>,NodeType>::type>
{};

这里的诀窍是void代表自我。当我们使用它时,我们只是有条件地交换B<T>.


推荐阅读