J'ai du mal à trouver pourquoi je ne peux pas transformer pour travailler avec un template template.Comment utiliser std :: transformer avec des templates
Voici une version simplifiée de la classe de modèle:
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_;
};
Et c'est là que je suis en train d'utiliser transformer pour capturer toute la sortie bool de la fonction de membre d'ajouter:
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));
}
Le Le but est d'insérer chaque membre du conteneur toAdd en utilisant base :: add ou base :: addTo, et de capturer les résultats bool dans les résultats vectoriels
Quelle est la question? Si c'est "pourquoi ce code ne compile pas", alors entre autres choses les définitions de fonctions en C++ doivent avoir un type de retour, et 'main' a le type de retour' int' ;-) –
Pouvez-vous expliquer ce que vous essayez d'atteindre dans transformer? – Naveen
Correct - impossible de compiler. Donner la main au type complet n'est pas une condition préalable à tout compilateur que j'ai utilisé. – youngthing