重载的for_each我使用一个typedef定义容器的类型在我的程序,这样我可以使用正常的STL容器和STXXL容器之间容易地切换,沿着线:特定迭代器类型
typedef stxxl:vector<Data> MyContainer;
或
typedef std:vector<Data> MyContainer;
一个困难是,STXXL提供的std::for_each
一个特殊版本,stxxl::for_each
即与STXXL容器的使用进行了优化。当MyContainer的typedeffed为stxxl::vector
时,我更愿意使用此函数。
一个解决方案是定义我自己的for_each
函数,该函数调用正确的for_each
函数并使用该函数,只要我想调用for_each
即可。
我目前研究的另一种解决方法是重载/专业std::foreach
,使其调用stxxl::for_each
每当它被称为一个stxxl::vector<Data>::(const_)iterator
作为第一和第二个参数。
我不能让第二个想法,虽然工作。我已经试过如下:
namespace std
{
template <class UnaryFunction>
UnaryFunction for_each(stxxl:vector<Data>::const_iterator first,
stxxl:vector<Data>::const_iterator last, UnaryFunction f)
{
stxxl::for_each(first, last, f, 4);
}
}
随着对非const迭代器类似的功能。他们不会被叫到。
什么将是解决这一问题的首选解决方案?我怎样才能得到迭代器的std::for_each
我的版本被调用?
更新:我得到的第二个想法现在的工作,张贴。问题是我包含了错误的文件(哎哟......)。但第一个问题仍然存在:对这个问题的首选解决方案是什么?是否可以重载std :: for_each,因为std命名空间不适用于凡人?
我永远不会记住你被允许注入std namespacem的规则,我打赌大多数其他人也不能。所以我宁愿选择非侵入性解决方案。 – 2010-01-01 16:50:41