Je suis en train de mettre en œuvre une fonction qui me permet de faire un appel comme celui-citemplate vecteur
// veca is a vector of tuples in my case
columnViewOfTuple<0>(veca);
I mis en œuvre cette fonction comme suit
template<int N>
struct myfunction {
template<typename T, typename R>
std::vector<R> operator() (T& container)
{
std::vector<R> myvector;
for(typename T::iterator it = container.begin(); it!=container.end(); it++)
myvector.push_back((R)(*it).template get<N>());
return myvector;
}
};
chaque fois que j'appelle myfunction < 0> (vec5), où vec5 est un vecteur de tuples, il est dit
main.cpp: Dans la fonction 'int main()': main.cpp: 156: erreur: déclaration conflictuelle 'myfunction 0 Main.cpp: 155: erreur: 'vec5' a une déclaration précédente en tant que 'main() :: vec1_t vec5'
Vous savez comment résoudre ce problème?
Merci
Pourquoi voulez-vous que l'int N soit un paramètre de modèle au lieu d'un paramètre de fonction? – JoshD
Voir, par exemple: http://stackoverflow.com/questions/1600464/ –
c'est une exigence. J'ai besoin de N comme paramètre de template – Bob