2010-08-03 78 views
1

有没有什么办法可以使boost::bindstd::fill一起工作?C++绑定问题

我尝试以下,但它没有工作:

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

对于将来的参考,“它没有工作”不是对您的问题有帮助的描述。您应该复制并粘贴编译器给您的确切错误。 C++错误可能非常隐晦,但StackOverflow的经验丰富的老兵经常能够从编译器错误中诊断出您的问题。幸运的是,在这种情况下似乎没有必要。 – 2010-08-03 22:08:35

回答

10

的问题是,std::fill是一个模板函数。模板函数并不存在,所以说,直到它们被实例化。你不能把地址std::fill,因为它不存在;它只是使用不同类型的类似函数的模板。如果你提供模板参数,它会引用模板的特定实例,并且一切都会好的。

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

std::vector<int> x(10); 
boost::bind(std::fill<std::vector<int>::iterator, int>, x.begin(), x.end(), 1); 
+0

+1你可能想要用'std :: fill'是一个模板的事实来重写它,绑定的参数必须是一个特定的实例。 – 2010-08-03 22:18:23

+0

谢谢,那就是我一直在寻找的。 – 2010-08-03 22:27:06