// 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..
//#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..
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货