有沒有什麼辦法可以使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