C++ 模板(在插入方法中)

标签 c++ templates generics

我已经实现了一个红黑树,它运行良好。但是,我需要通过在 C++ 中使用模板(泛型)来实现它可以与任何数据类型一起使用的方式。 向树中添加项目时,键和项目本身都应该是泛型类型(C++ 模板)

代码:

RB_Node* RedBTree::RBTInsert(void* key, void* item)
{
    RB_Node* y;
    RB_Node* x;
    RB_Node* newNode;
    //rest of algorithm
}

如何将这 2 个参数作为通用参数?我是 C++ 和模板本身的新手,非常感谢任何帮助

最佳答案

您可以使用 template 开始您的声明,然后是一组合适的模板参数,用结果名称替换您的 void*,并假装模板参数只是恰好是普通类型。只要您不需要任何关联类型并且您的代码只需要为常规类型参数工作,您就可以了:

template <typename Key, typename Value>
RB_Node* RedBTree<Key, Value>::RBInsert(Key const& key, Value const& item)
{
    // pretty much like before...
}

当我开始使用模板时,我首先用具体类型实现我的代码,确保它能正常工作,然后用模板参数替换具体类型。一段时间后(我想不到 5 年)我跳过了先写具体类型的东西。事实证明,一旦您了解了模板的相关知识,就概念而言编写实际上比费心于具体类型更容易。

关于C++ 模板(在插入方法中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20961285/

相关文章:

c++ - 理解左值到右值转换的例子

c++ - 如果您通过复制传递 lambda 函数,实际复制的是什么?

模板类的 C++11 std::vector 在构造函数中带有参数

c++ - 什么情况下new会两次返回同一个地址?

swift - 通用可选枚举函数

c++ - C 中 OpenMP 并行编程的性能

c++ - 这条线是如何打印数组的?

c++ - C++03 中的函数返回类型推导

java - Java 函数的参数是否需要可选接口(interface)?

swift 为什么这样做?需要 AnyObject 与 Any