如何使用静态内部 class 成员的别名?
How do I use an alias of the static inner class member?
如下代码,我想使用别名来避免内部class 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 的 in-Class 初始化不会像您在示例中显示的那样工作,因为它不是 constexpr。您可能必须在 class.
之外定义和初始化它
编辑:
如果你坚持使用 c++11 编译器,你能做的最好的事就是使用一个 returns 指针引用的函数:
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>()-> ...
如下代码,我想使用别名来避免内部class 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 的 in-Class 初始化不会像您在示例中显示的那样工作,因为它不是 constexpr。您可能必须在 class.
之外定义和初始化它编辑:
如果你坚持使用 c++11 编译器,你能做的最好的事就是使用一个 returns 指针引用的函数:
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>()-> ...