【发布时间】:2018-08-13 19:25:32
【问题描述】:
我使用template <class T> 创建了一个SinglyLinkedList 模板类。例如,如果我输入“字符串”作为我的命令行参数,我想创建SinglyLinkedList<string>* string_list = new SinglyLinkedList<string>();。如果我输入“数字”作为我的命令行参数,我想创建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 中做到这一点?
【问题讨论】:
-
多态性。让你的模板类型都继承自一个基类
-
或使用boost::any 或std::any。请注意,这与您想以相同方式使用
vector<string>或vector<int>没有什么不同。 -
一个问题是:为这两种类型的列表设置一个变量是否有用?如果你真的想对这些列表的元素做任何有用的事情,你需要再次知道它们的类型。在一种情况下,您需要字符串变量/函数/值,在另一种情况下,int 也是如此。如果您想使用其中包含的元素,那么拥有这样的“通用”列表并没有真正的帮助。
-
@sth 如果我理解正确,我有一个通用 Node 类,它有一个名为 value 的通用变量。请看一下我在 Ken Y-N 的回答下方的第一条评论。
-
@sth 你是说我最好的选择是创建单独的非泛型变量(一个 int 和一个 string)?
标签: c++ eclipse c++11 templates linked-list