【发布时间】:2016-07-20 14:14:22
【问题描述】:
我注意到大多数(全部?)可以存储用户定义类型的 C++ 数据结构都使用模板:
std::vector<T>, std::unordered_map<T....>, etc.
在我看来这是必需的,否则这些数据结构将不得不返回为用户必须手动转换的险恶指针void*,如下所示:
std::vector a;
int b;
a.push_back(b);
static_cast<int>(a.get(0));
可以不使用模板吗?还有其他替代方法吗?
编辑: 许多 cmets 建议没有模板,这是不可能/不切实际的。 (谢谢!)
如果我将 <T> 限制为真正的指针(例如,不是 int/float),它仍然不切实际吗?
【问题讨论】:
-
static_caston get 只是问题的一小部分。在您的示例中,假设的vector::push的声明是什么? -
有可能,但这意味着采用纯 C 风格的策略。我可以给你的主要例子是链表和 RB 树在 Linux 内核中的实现方式
-
使用模板,您可以获得按值存储元素的容器。在
void *的情况下,这不是一个选项... -
您觉得必须避免使用的模板是什么?它们是解决这个问题的绝佳方法。
-
您认为模板阻止您解决的实际问题是什么?你需要一个异构的还是什么?
标签: c++ templates data-structures