Quelle est la manière la plus élégante (peut-être C++ 17-way) pour vérifier si les signatures de deux méthodes définies dans deux classes différentes sont exactement les mêmes?Caractère de type pour faire correspondre les signatures des fonctions membres de différentes classes
Par exemple:
template< typename ...Ts >
struct A
{
void f(Ts...);
};
template< typename ...Ts >
struct B
{
void g(Ts...);
};
static_assert(has_same_signatures< decltype(&A<>::f), decltype(&B<>::g) >{});
static_assert(!has_same_signatures< decltype(&A<int>::f), decltype(&B<char>::g) >{});
//static_assert(has_same_signatures< decltype(&A<void>::f), decltype(&B<>::g) >{}); // don't know is it feasible w/o extra complexity
Ce serait formidable, si les types de fonctions non-membres de chaque côté seraient autorisés aussi.
Peut-être que le type de résultat devrait aussi être enchevêtré.
La tâche provient du problème commun de la correspondance des signatures signal/emplacement dans le cadre Qt.
@Barry Ne pense pas, que les esperluettes nécessaires. Pensez-vous que les références aux fonctions ne sont pas assez bonnes? – Orient
Vous ne pouvez pas faire référence à une fonction membre non statique sans le '&'. – Barry