我在努力找出爲什麼我無法使用模板類進行轉換。如何在模板中使用std :: transform
這裏是模板類的簡化版本:
template<typename T>
class base
{
public :
base() : all_() {}
~base() {}
public:
bool add(T t)
{
typename vector<T>::iterator itr
= lower_bound(all_.begin(), all_.end(), t);
if (itr == all_.end() || *itr != t)
{
all_.push_back(t);
cout << "ok" << endl;
return true;
}
cout << "failed" << endl;
return false;
}
static bool addTo(base<T> *c, T t)
{
return c->add(t);
}
private :
vector<T> all_;
};
而這正是我試圖利用變換來捕獲所有從添加成員函數輸出的布爾:
main()
{
base<int> test;
vector<bool> results;
vector<int> toAdd;
toAdd.push_back(10);
toAdd.push_back(11);
toAdd.push_back(10);
transform(toAdd.begin(), toAdd.end(),
back_inserter(results),
bind1st((bool(*)(base<int>*,int))base<int>::addTo, &test));
}
的目標是使用base :: add或base :: addTo插入toAdd容器的每個成員,並捕獲向量結果中的bool結果
有什麼問題嗎?如果它是「爲什麼不編譯這個代碼」,那麼C++中的函數定義必須具有返回類型,而'main'具有返回類型'int' ;-) – 2009-11-27 17:21:30
你能解釋一下你試圖在轉變? – Naveen 2009-11-27 17:23:21
正確 - 無法編譯它。主要完整類型不是我使用過的任何編譯器的先決條件。 – youngthing 2009-11-27 17:23:54