Apakah ada cara untuk memeriksa apakah dua fungsi memiliki tanda tangan yang sama? Sebagai contoh:
int funA (int a, int b);
int funB (int a, int b);
float funC (int a, int b);
int funD (float a, int b);
Dalam contoh ini, funA
dan funB
merupakan satu-satunya kombinasi fungsi yang harus kembali true
.
c++
function
c++17
c++-standard-library
function-signature
Stefano Pittalis
sumber
sumber
Anda dapat memeriksa jenis fungsi dengan
decltype
danstd::is_same
. misalnyaHIDUP
sumber
Orang lain telah menyebutkan solusi menggunakan
std::is_same
dandecltype
.Sekarang untuk menggeneralisasi perbandingan untuk sejumlah tanda tangan fungsi sewenang-wenang, Anda dapat melakukan hal berikut
dan bandingkan sebanyak mungkin fungsi
( Lihat Demo Langsung )
Atau untuk kurang mengetik (mis. Tanpa
decltype
), jadikan itu sebagai fungsidan telepon hanya dengan
( Lihat Demo Langsung )
sumber
Sebagai kemungkinan lain yang belum disebutkan: Anda dapat menggunakan
typeid
daritypeinfo
dan==
:sumber
error: non-constant condition for static assertion
.constexpr
. Saya punya contoh yang sedikit lebih baik sekarang.