// delegate_test.cpp : Defines the entry point for the console application.
//#include "stdafx.h"template <class TArg> class Delegate;template <>
class Delegate<void>
{
private:
    typedef void (*stub_t)(void*);
    stub_t  stub;
    void*   object;
    Delegate(stub_t stub, void* object) : stub(stub), object(object) {}
    template <class T, void (T::*TMember)()>
static void Stub(void* object)
    {        
(static_cast<T*>(object)->*TMember)();
    }
public:
    Delegate() : stub(0), object(0) {}
    void operator()() {stub(object);}
    template <class T, void (T::*TMember)()>
static Delegate Make(T* object)    
{
        return Delegate(Stub<T, TMember>, object);    
}
};class TestClass{
public:
void Test(){ printf("Test object"); };
};TestClass object;Delegate<void> delegate;void main(){
    Delegate<void>::Make<TestClass, TestClass::Test>(&object);
    delegate();
}还在学习VC..