Есть ли способ проверить, имеют ли две функции одинаковую подпись? Например:
int funA (int a, int b);
int funB (int a, int b);
float funC (int a, int b);
int funD (float a, int b);
В этом примере funA
и funB
есть единственная комбинация функций, которую следует вернуть true
.
c++
function
c++17
c++-standard-library
function-signature
Стефано Питталис
источник
источник
Вы можете проверить тип функции с помощью
decltype
иstd::is_same
. напримерЖИТЬ
источник
Другие упоминали решение с использованием
std::is_same
иdecltype
.Теперь, чтобы обобщить сравнение для произвольного числа сигнатур функций, вы можете сделать следующее
и сравнить столько функций, сколько нравится
( Смотрите Live Demo )
Или для меньшего набора текста (т.е. без
decltype
), сделайте это как функциюи позвонить просто
( Смотрите Live Demo )
источник
В качестве еще одной возможности, которая не была упомянута: вы можете использовать
typeid
изtypeinfo
и==
:источник
error: non-constant condition for static assertion
.constexpr
. У меня сейчас чуть лучший пример.