Funciona muy bien, para funciones simples de vanilla. El siguiente código funciona bien. Imprime sólo lo es debería:Use Boost para obtener los tipos de arity y paramerter de la función de miembro. (boost :: function_traits)
int __cdecl(int, char)
2
int,char
#include <boost/type_traits.hpp>
#include <boost/function.hpp>
#include <boost/typeof/std/utility.hpp>
#include <iostream>
using std::cout;
using std::endl;
int foo(int, char) {
return 0;
}
int main() {
typedef BOOST_TYPEOF(foo) foo_type;;
typedef boost::function_traits<foo_type> function_traits;
cout << typeid(foo_type).name() << endl;
cout << function_traits::arity << endl;
cout << typeid(function_traits::arg1_type).name() << ",";
cout << typeid(function_traits::arg2_type).name() << endl;
return 0;
}
Por lo tanto, la pregunta es, ¿cómo se puede hacer esto si foo es una función miembro de la barra de clase?
struct bar {
int foo(int, char) { return 0; }
};
me han tratado innumerables combinaciones de estas construcciones: BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() BOOST_TYPEOF_REGISTER_TYPE() :: impulso impulso ref :: remove_pointer impulso impulso :: bind :: mem_fn
etc, etc ... No se alegría.
Créanme, he probado todas las variantes usando BOOST_TYPEOF (& bar :: foo) que se me ocurren. Espero que alguien pueda publicar un programa pequeño y funcional, como el de la pregunta. –
La mayoría de las personas lo hacen. He sido programador profesional desde 1971, y aprendí que no tiene sentido enunciar las cosas. Gracias por tu ayuda. –
@Jive, no hay problema, de todos modos no obtengo nada, aunque esto me dio la inclinación de intentar hacer esa cosa completa de la biblioteca de reflexión C++ de nuevo;> –