gpt4 book ai didi

c++ - 树节点类的可变参数和模板模板参数以及部分规范

转载 作者:行者123 更新时间:2023-12-03 07:22:45 24 4
gpt4 key购买 nike

随着新标准的流行,程序员可以使用template template parametervaradic template来定义类模板,如下所示:

/* C++ code */
template <template <class...> class container = std::unordered_multimap, typename... args>
class basic_node {
public:
container<args...> set;
};

/* class partial specialization */
template <typename key, typename value, typename hash, typename pred, typename alloc>
class basic_node<std::unordered_multimap, key, value, hash, pred, alloc> {
protected:
std::unordered_multimap<key, value, hash, pred, alloc> set;
};
我的想法是定义一个类模板,该模板在组合的容器成员中包含其子集:
/* We use CRTP to avoid complain about incomplete type tree_node */
class tree_node : public basic_node<
std::unordered_multimap,
std::string, /* key: name tag in text */
tree_node, /* CRTP on value : element object in container */
std::hash<tree_node>, /* some compatible hash */
std::equal_to<tree_node>, /* some compatible equal_to */
std::allocator<tree_node>> /* some a default allocator */
{
public:
/* ERROR: tree_node is of incomplete type because the compiler is now on it */
//std::unordered_multimap<std::string, tree_node, std::hash<tree_node>, std::equal_to<tree_node>, std::allocator<tree_node>> set; /* inherited members */
};
这种方法听起来合理吗?我的意思是,我过去常常对设计引起的curiously_recurring_template_pattern(CRTP)惯用语 template tree_node<std::unordered_multimap<tree_node<std::unordered_multimap<tree_node<std::unordered_multimap<...>>>>>>...感到困惑,但现在看来上述方法对我来说很方便,或者呢?
编辑:
  • std::unordered_multimap的校正参数。
  • 感谢您和CRTP的设计。
  • 最佳答案

    如果您担心使用struct S : C<S /*, ..*/>进行“递归”,那就很好。
    这是成语Curiously_recurring_template_pattern (CRTP)

    关于c++ - 树节点类的可变参数和模板模板参数以及部分规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64604121/

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