在c ++ 98中确定类型是否是编译时的容器

时间:2016-03-04 03:14:27

标签: c++

有没有办法在begin()中确定某个类型是某种容器(可能包含end()c++98并转发迭代器)?我看到this,但它使用decltype中的c++11

同样为每个容器(列表,向量等)制作专业化并不是那么有吸引力 - 也许更通用的东西?

可能是重复......我想这曾经是一个常见的问题

修改

我认为this几乎是我所需要的,我应该从中删除tuple内容,并将std::enable_if替换为c ++ 98代码。我现在应该怎么处理这个问题?保持开放?要么?如果有人为我工作,我很乐意接受他的回答:D

2 个答案:

答案 0 :(得分:1)

我找到了这个 - cxx-prettyprint并会根据我的需要进行调整。

答案 1 :(得分:0)

您可以为要支持的所有常见容器编写特化,并在通用(非专用)模板中编译失败。

STL中没有那么多容器。差不多15岁。

在这种情况下,您的专业化将仅通过常规机制为常见容器选取,并且用户仍然可以使用自己的容器,只要他们编写所需的专业化。

关于C ++ 98 / C ++ 11还有其他一点。编译器没有一步实现所有C ++ 11功能。例如,constexpr仅由Microsoft在VisualStudio 2015中实现。如果您尝试在随机编译器上运行代码,则希望看到某些C ++ 11功能存在,某些功能不存在。

使用C ++ 11的某些功能可能不是一个大错误,前提是您知道它们是在您感兴趣的编译器中尽早实现的。