2010-08-03 120 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