我已经使用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>();
}
}