Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MFC实现与模板的动态创建_C++_Mfc - Fatal编程技术网

C++ MFC实现与模板的动态创建

C++ MFC实现与模板的动态创建,c++,mfc,C++,Mfc,是否有任何方法可以将实现_DYNCREATE与模板类一起使用?若否,原因为何?还有别的解决办法吗 例如: template<typename T> class A : public B{ public: A(){ printf("A constuctor "); } void fn( ){ T* a = new T(); } }; IMPLEMENT_DYNCREATE(A<CObject>, B); 模板 A类:公共B类{ 公众: A(){printf(“构造函数”

是否有任何方法可以将
实现_DYNCREATE
与模板类一起使用?若否,原因为何?还有别的解决办法吗

例如:

template<typename T>
class A : public B{
public:
A(){ printf("A constuctor "); }
void fn( ){ T* a = new T(); }
};

IMPLEMENT_DYNCREATE(A<CObject>, B);
模板
A类:公共B类{
公众:
A(){printf(“构造函数”);}
void fn(){T*a=new T();}
};
实施动态创建(A、B);

好的,我快速查看了这些宏,并创建了一个完全未经测试的宏,它可能会工作

#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)

试一试,正如我所说,它可能会起作用:基本上VisualStudio2005支持模板运行时类,但Microsoft从VisualStudio2010(或2008)起就取消了宏

解决方案:将模板类运行时宏从visual studio 2005的
afx.h
中复制出来,并创建一个
.h
文件

IMPLEMENT_DYNCREATE( A, CObject, B);