我已经使用SinglyLinkedList创建了template <class T>模板类。例如,如果我输入“ string”作为命令行参数,我想创建SinglyLinkedList<string>* string_list = new SinglyLinkedList<string>();。如果我输入“ number”作为我的命令行参数,我想创建SinglyLinkedList<string>* number_list = new SinglyLinkedList<string>();

有没有一种方法可以将我结合起来,以便按照以下方式进行操作:

SinglyLinkedList<>* list;
if (argv[0] == "string") {
    list = new SinglyLinkedList<string>();
} else if (argv[1] == "number") {
    list = new SinglyLinkedList<int>();
}


如果现在执行此操作,第一行将引发错误invalid template code

有没有办法在C ++ 11中做到这一点?

最佳答案

如果将整个列表处理放入通用函数中,事情可能会更容易:

template<typename Item>
void process_list() {
  SinglyLinkedList<Item>* list = new SinglyLinkedList<Item>();
  Item it;
  if (std::cin >> it) {
     list->push(it);
  }
}


这样,您就可以对Item类型的泛型项进行所有处理,并且在调用函数时只需区分一次类型:

int main(int argc, const char **argv) {
    if (argv[0] == "string") {
        process_list<string>();
    } else if (argv[1] == "number") {
        process_list<int>();
    }
}

10-07 13:17