1

有什么办法可以一起boost::bind工作std::fill吗?

我尝试了以下方法,但没有奏效:

boost::bind(std::fill, x.begin(), x.end(), 1);
4

1 回答 1

10

问题是这std::fill是一个模板函数。可以说,模板函数在被实例化之前并不真正存在。你不能取地址,std::fill因为它并不真正存在;它只是使用不同类型的类似功能的模板。如果您提供模板参数,它将引用模板的特定实例化,一切都会好起来的。

std::fill函数有两个模板参数:ForwardIteratorType,它是容器的迭代器的类型,以及DataType,它是容器持有的类型。您需要同时提供两者,以便编译器知道std::fill您要使用模板的哪个实例化。

std::vector<int> x(10);
boost::bind(std::fill<std::vector<int>::iterator, int>, x.begin(), x.end(), 1);
于 2010-08-03T22:04:07.577 回答