首页 > 解决方案 > 我该如何调用这个模板函数?

问题描述

我一直在寻找一种将常量迭代器转换为迭代器的方法,我偶然发现了这个 StackOverflow 问题:

如何删除 const_iterator 的常量?

建议使用此模板功能的答案:

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);
    }

在我的主要代码中?

标签: c++cgal

解决方案


#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;

}

推荐阅读