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