c++ - 在特定类型元素的任何容器上采用 STL 迭代器的函数

标签 c++

我将如何定义一个函数,该函数将任何类型的 STL 容器上的迭代器作为输入,但仅限于特定模板类型的那些。例如:

std::list<Unit*>::iterator 形式的任何迭代器 std::vector<Unit*>::iterator

我只是定义函数来获取 std::list<Unit*>::iterator ,但如果我们切换到不同的 STL 容器,我不想更改我的代码。

有没有办法通过模板或其他方式做到这一点?

最佳答案

您可以使用 SFINAE构造如 boost::enable_if它验证嵌套的 typedef iterator::value_type 是否确实是适当的类型。

template<class T, class Iterator>
typename boost::enable_if<boost::is_same<typename Iterator::value_type, T> >::type
    f(Iterator i)
{
    /* ... */
}

int main()
{
    std::list<int> l;
    std::vector<int> v;

    f<int>(l.begin()); // OK
    f<int>(v.begin()); // OK

    std::vector<float> v2;
    f<int>(v2.begin()); /* Illegal */
}

这是我从“一个函数将任何类型的 STL 容器上的迭代器作为输入,但仅限于特定模板类型的函数”理解的,但我的解释可能是错误的。

关于c++ - 在特定类型元素的任何容器上采用 STL 迭代器的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4354665/

相关文章:

c++ - 显示条形图(和其他时髦的图形)

c++ - static_assert 如果声明了类型

c++ - std::allocator 中的直接初始化与统一初始化

c++ - 等于指针值正在改变指针引用

c++ - NVCC 尝试链接不必要的对象

c++ - C++中的批处理文件命令

c++ - 选择正确的模板成员函数的返回类型

c++ - 外部变量与静态变量的持续时间

c++ - 安卓 OpenGL ES 2.0 : Can a GL_FLOAT texture be assigned to a FBO as a COLOR attachment?

c++ - 如何定位一段时间内的某一系列汇编指令?