Aşağıdaki fikir için Stefan Pabst'a teşekkürler. ACC, ACCU 2015'te beş dakikalık bir yıldırım konuşması yaptı. Ekstra çifti yazmaktan kaçınmak için, cv niteleyici ve/veya referans niteleyicisi ve C++ 17 değişken şablonu ile aşırı yüklenmelerin çözümlenmesine izin vermek için etiket türleri ile genişlettim. Aksi halde gerekli olan parantezler.
Bu çözüm, döküm tabanlı yanıtlarla aynı prensipte çalışır, ancak işlevin dönüş türünü veya üye işlevlerinde, işlevin bir sınıf olduğu sınıfın adını değiştirmek zorunda kalmazsınız. derleyici olarak bu şeyleri çıkartabiliyor.
bool free_func(int, int) { return 42; }
char free_func(int, float) { return true; }
struct foo {
void mem_func(int) {}
void mem_func(int) const {}
void mem_func(long double) const {}
};
int main() {
auto f1 = underload<int, float>(free_func);
auto f2 = underload<long double>(&foo::mem_func);
auto f3 = underload<cv_none, int>(&foo::mem_func);
auto f4 = underload<cv_const, int>(&foo::mem_func);
}
underload
şablonu uygulayan kod here olduğunu.
Teşekkürler! Üye işlevleri statik ise ne olur? (Hata alıyorum: bağlamsal tip bilgisi olmayan aşırı yüklenmiş fonksiyonun adresi) –
@Neil: Benim düzenlemeye bakın –
Oh, görüyorum, sadece ilk A :: 'statik fonksiyonlar için düzenli işaretçilere yayınlanacak. Beni buna dövüyorsun :) –