好吧,我已經採取了快速瀏覽一下宏和一起引發一個完全未測試的宏,可能工作。
#define _RUNTIME_CLASS(class_name, template_name) ((CRuntimeClass*)(&class_name<template_name>::class##class_name##template_name))
#define RUNTIME_CLASS(class_name, template_name) _RUNTIME_CLASS(class_name, template_name)
#define _IMPLEMENT_RUNTIMECLASS(class_name, template_name, base_class_name, wSchema, pfnNew, class_init) \
AFX_COMDAT CRuntimeClass class_name<template_name>::class##class_name##template_name = { \
#class_name, sizeof(class class_name<template_name>), wSchema, pfnNew, \
RUNTIME_CLASS(base_class_name), NULL, class_init }; \
CRuntimeClass* class_name<template_class::GetRuntimeClass() const \
{ return RUNTIME_CLASS(class_name, template_name); }
#define IMPLEMENT_DYNCREATE(class_name, template_name, base_class_name) \
CObject* PASCAL class_name<template_name>::CreateObject() \
{ return new class_name<template_name>; } \
IMPLEMENT_RUNTIMECLASS(class_name, template_name, base_class_name, 0xFFFF, \
class_name<template_name>::CreateObject, NULL)
然後,您可以撥打:
IMPLEMENT_DYNCREATE(A, CObject, B);
試試看吧,就像我說的,它可能工作:d
來源
2009-09-29 12:09:43
Goz