Bonjour,
J'ai comme un problème pour définir un pointeur sur une fonction membre templatée et dont la signature fait intervenir des arguments variadiques.
Ci-dessous un code simplifié au maximum et qui illustre le problème rencontré:
Exemple d'usage:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 struct B {}; struct A { template<typename T, typename... Args> bool update(Args&&... args) { } };
Maintenant je voudrais obtenir le fameux pointeur sus-mentionné.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 A a; a.update<B>(); // pas de problème a.update<B>(3.14); // pas de problème
gcc (4.8) ou clang (3.4) me disent qu'ils ne trouvent pas de matches pour la fonction membre lors de la définition du pointeur f, et que le candidat est bien-sur bool A::update(Args&&... args)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // équivalent de a.update<B>(); bool (A::*f)() = &A::template update<B>; // ok // équivalent de a.update<B>(3.14); // PAS OK: bool (A::*f)(double) = &A::template update<B,double>; // PAS BON NON PLUS: auto f = static_cast<bool (A::*)(double)>(&A::template update<B,double>);
Si quelqu'un a une idée, je suis preneur. J'ai également essayé avec decltype mais sans succès.
Merci.
Partager