有没有什么办法可以使boost::bind
与std::fill
一起工作?C++绑定问题
我尝试以下,但它没有工作:
boost::bind(std::fill, x.begin(), x.end(), 1);
有没有什么办法可以使boost::bind
与std::fill
一起工作?C++绑定问题
我尝试以下,但它没有工作:
boost::bind(std::fill, x.begin(), x.end(), 1);
的问题是,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);
+1你可能想要用'std :: fill'是一个模板的事实来重写它,绑定的参数必须是一个特定的实例。 – 2010-08-03 22:18:23
谢谢,那就是我一直在寻找的。 – 2010-08-03 22:27:06
对于将来的参考,“它没有工作”不是对您的问题有帮助的描述。您应该复制并粘贴编译器给您的确切错误。 C++错误可能非常隐晦,但StackOverflow的经验丰富的老兵经常能够从编译器错误中诊断出您的问题。幸运的是,在这种情况下似乎没有必要。 – 2010-08-03 22:08:35