Ich bin sicher, dass ich das schon einmal beschrieben gesehen habe, kann es aber ums Verrecken nicht mehr finden.
Angenommen, ich habe eine Klasse mit einer Membefunktion irgendeiner Form, z.B.:
int Foo::Bar(char, double)
Wie kann ich ein Template und verschiedene Spezialisierungen verwenden, um die Bestandteile der Typen abzuleiten, z.B.:
template
struct Types;
// Spezialisierung für Membefunktion mit 1 Argument
template
struct Types
{
typedef RetType return_type;
typedef ClassType class_type;
typedef MemFunc mem_func;
typedef Arg0 argument_0;
usw...
};
// Spezialisierung für Membefunktion mit 2 Argumenten
template
struct Types
{
typedef RetType return_type;
typedef ClassType class_type;
typedef MemFunc mem_func;
typedef Arg0 argument_0;
typedef Arg0 argument_1;
usw...
};
So dass, wenn ich Types mit meiner oben genannten Membefunktion instanziiere, z.B.:
Types<&Foo::Bar>
es sich zur richtigen Spezialisierung auflöst und die relevanten typedefs deklariert?
Bearbeiten:
Ich spiele gerade mit schnellen Delegaten mit dem Rückruf statisch an eine Membefunktion gebunden.
Ich habe das folgende Konzept, von dem ich glaube, dass es statisch an die Membefunktion gebunden ist:
#include
template
struct cb
{
cb( class_t *obj_ )
: _obj(obj_)
{ }
void operator()()
{
(_obj->*mem_func_t)();
}
class_t *_obj;
};
struct app
{
void cb()
{
std::cout << "hello world\n";
}
};
int main()
{
typedef cb < app, &app::cb > app_cb;
app* foo = new app;
app_cb f ( foo );
f();
}
Wie kann ich dies jedoch als Spezialisierung in der oben genannten Art und Weise erhalten?