如何使各种高度相似的类型的函数通用?

时间:2017-01-22 16:36:04

标签: c++ c++11 templates

我有一个不同类型的链表格式(例如doublestruct DblNode { double value; DblNode * next; } struct IntNode { int value; IntNode * next; } ):

DblNode * dbl_listind(DblNode * head,int ind){
    DblNode * position = head;
    int counter = 0;
    while(counter < ind){
        position = position -> next;
        counter++;
    }
    return position;
}

现在我正在为这些列表做些事情,我遇到的问题是我不断复制和粘贴函数,进行次要类型编辑:

int

然后复制char inputString[10]; // initialize string fgets(inputString, 11, stdin); // put input in inputString

有没有办法以某种方式有一个通用的列表类型,然后以某种方式指定这个功能,独立于我的链表的值成员的类型?

1 个答案:

答案 0 :(得分:5)

那是什么类/功能模板应该做的。 e.g。

template <typename T>
struct Node {
    T value;
    Node * next;
}

template <typename T>
Node<T> * listind(Node<T> * head,int ind){
    Node<T> * position = head;
    int counter = 0;
    while(counter < ind){
        position = position -> next;
        counter++;
    }
    return position;
}

// optional
using DblNode = Node<double>;
using IntNode = Node<int>;