gpt4 book ai didi

c++ - 如何使用静态内部类成员的别名?

转载 作者:行者123 更新时间:2023-11-30 05:19:03 24 4
gpt4 key购买 nike

如下代码,我想使用别名来避免内部类NIL的静态成员的繁琐编写。

//in RBTree.hpp
template <typename T, typename Comp>
class RBTree{
public:
struct TreeNode{
...
static TreeNode* NIL = new TreeNode();
...
}
}

//in RBTree_IMPL.hpp
template <typename T, typename Comp>
using NIL = ???

我想使用关键字'using'来避免繁琐的写作,例如:

//in BST.hpp
template <typename T, typename Comp>
class BST{
public:
struct TreeNode{
...
}
}

//in BST_IMPL.hpp
template <typename T, typename Comp>
using TreeNode = typename BST<T, Comp>::TreeNode;

如上,就简单了。所以我想找到一种使用静态内部成员的方法,如上所述。谢谢!

最佳答案

using 用于创建类型的别名。您想要为变量创建一个别名,在 c++ 中它是一个引用。感谢 c++14 的模板变量,以下应该可以工作:

//in RBTree_IMPL.hpp
template <typename T, typename Comp>
auto& NIL = RBTree<T,Comp>::TreeNode::NIL;

顺便说一句:我认为 NIL 的类内初始化不会像您在示例中展示的那样工作,因为它不是 constexpr。您可能必须在类之外定义和初始化它。

编辑:

如果你被 c++11 编译器困住了,你能做的最好的事情就是使用一个返回指针引用的函数:

template <typename T, typename Comp>
auto NIL() -> typename RBTree<T,Comp>::TreeNode*& {
return RBTree<T,Comp>::TreeNode::NIL;
}

//usage e.g.:
NIL<int,std::less<int>()-> ...

关于c++ - 如何使用静态内部类成员的别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41338834/

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