gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 22:08:27 25 4
gpt4 key购买 nike

我将如何定义一个函数,该函数将任何类型的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com