Belirli bir sınıf için bir serbest fonksiyonun aşırı yüklenip yüklenmediğini belirlemek için SFINAE kullanarak bir yol var mı?SFINAE: Sınıfın serbest fonksiyonu olup olmadığını tespit edin
Temelde, aşağıdaki çözüm var:
struct has_no_f { };
struct has_f { };
void f(has_f const& x) { }
template <typename T>
enable_if<has_function<T, f>::value, int>::type call(T const&) {
std::cout << "has f" << std::endl;
}
template <typename T>
disable_if<has_function<T, f>::value, int>::type call(T const&) {
std::cout << "has no f" << std::endl;
}
int main() {
call(has_no_f()); // "has no f"
call(has_f()); // "has f"
}
Basitçe orada foo
ve bar
türde bir çok aslında ve call
fonksiyonu bunlardan hiçbir bilgiye sahip olduğundan temelde (çalışmıyor call
aşırı call
'un içinde bir ve kullanıcılar kendi türlerini tedarik ederler).
C++ 0x kullanamıyorum ve tüm modern derleyiciler için çalışan bir çözüme ihtiyacım var.
Not: similar question'un çözümü ne yazık ki burada çalışmıyor.
Çok zorlayıcı problem. Ben de çözümü bilmek istiyorum. –
Sadece örnekleme noktasında görülebilen işlevleri tespit etmek ister misiniz? –
@Johannes Benim durumumda gerçekten önemli değil. Anlatım noktasında (fonksiyon şablonunun), tüm aday fonksiyonlar * bilinecektir. –