【发布时间】:2021-12-26 03:55:52
【问题描述】:
如果参数是我创建的迭代器,我需要一个只接受非整数类型的函数模板(我创建了自己的类并使用 enable_if 和一个标签,我设法推断出参数是否是我创建的迭代器或不是)
template <typename InputIterator>
foo (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type(),
typename ft::enable_if<InputIterator::InputIter, InputIterator>::type = NULL)
{
insert(begin(), first, last);
}
我想确保传递给函数的参数是我自己的迭代器或双向迭代器,但是我认为如果我可以检查“InputIterator”是否只是非整数但我不知道这会容易得多实现它需要什么,我不确定它是否是一个好主意,因为归根结底,我真正需要的是确保它是一个符合我标准的迭代器。
我应该如何进行?哪些功能值得研究?
我正在使用 -std=c++98,所以我坚持使用 c++98 库,所以没有 c++11 或 98 之后出现的任何功能。
【问题讨论】:
-
也许完全删除 SFINAE?如果将“双向迭代器”近似为您可以接受的“非整数”,为什么首先需要它? "am using -std=c++98" :/ 你真的应该升级。甚至
std::is_integral也是 C++11 的特性。 -
@HolyBlackCat 它是学校项目的一部分,由于该主题,仅限于 c++ 98,我重新制作了自己的 enable_if 和 is_integral 但我只是在我无法确定的领域缺乏知识其余的功能,一些答案提到了很多我以前不知道的东西,它看起来很有帮助,所以我认为它在 98 上是可行的,我将尝试实现我学到的东西,如果它有效,分享解决方案(如果有人有一天类似的问题)
-
“学校项目的一部分”。那么你可能想多了。 “使用 C++98”和“重新制作 C++>=11 的部分”是此类项目中几乎不会同时存在的两个要求。