¿Existe alguna manera, mediante SFINAE, para detectar si una función libre está sobrecargada para una clase determinada?SFINAE: detectar si la clase tiene la función libre
Básicamente, tengo la siguiente solución:
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"
}
Simplemente sobrecarga call
no funciona ya que en realidad hay una gran cantidad de foo
y bar
tipos y la función call
no tiene conocimiento de ellos (básicamente call
está dentro de a y los usuarios suministran sus propios tipos).
No puedo usar C++ 0x, y necesito una solución de trabajo para todos los compiladores modernos.
Lamentablemente, la solución a un similar question no funciona aquí.
problema muy inetersting. También quiero saber la solución. –
¿Desea detectar funciones que solo son visibles en el momento de creación de instancias? –
@Johannes Realmente no importa en mi caso. En el momento de la instanciación (de la plantilla de función), todas las funciones candidatas * serán * conocidas. –