c++ - 我该如何调用这个模板函数?
问题描述
我一直在寻找一种将常量迭代器转换为迭代器的方法,我偶然发现了这个 StackOverflow 问题:
建议使用此模板功能的答案:
template <typename Container, typename ConstIterator>
typename Container::iterator remove_constness(Container& c, ConstIterator it)
{
return c.erase(it, it);
}
我感到困惑的是如何在我的主代码中实现(调用)这个函数。我计划使用此代码将 CGAL Ccb_halfedge_const_iterator 转换为其非常量对应物。如果我的 Ccb_halfedge_const_iterator 的名称是dcel_circulator,我将如何调用此函数:
typename Container::iterator remove_constness(Container& c, ConstIterator it)
{
return c.erase(it, it);
}
在我的主要代码中?
解决方案
#include <iterator>
#include <vector>
template <typename Container, typename ConstIterator>
typename Container::iterator remove_constness(Container& c, ConstIterator it)
{
return c.erase(it, it);
}
int main()
{
std::vector<int> vec = {};
std::vector<int>::const_iterator iter = vec.begin();
std::cout << std::is_same_v<decltype(iter), std::vector<int>::const_iterator> <<" - "
<< std::is_same_v<decltype(iter), std::vector<int>::iterator>
<<std::endl;
auto iter2 = remove_constness(vec, iter);
std::cout << std::is_same_v<decltype(iter2), std::vector<int>::const_iterator> << " - "
<< std::is_same_v<decltype(iter2), std::vector<int>::iterator>
<< std::endl;
}