作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有什么方法可以在模板类中使用 IMPLEMENT_DYNCREATE
吗?如果不是,为什么不呢?还有其他解决方案吗?
例子:
template<typename T>
class A : public B{
public:
A(){ printf("A constuctor "); }
void fn( ){ T* a = new T(); }
};
IMPLEMENT_DYNCREATE(A<CObject>, 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)
然后你可以调用:
IMPLEMENT_DYNCREATE( A, CObject, B);
试一试,正如我所说,它可能会奏效:D
关于c++ - MFC IMPLEMENT_DYNCREATE 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1491971/
有什么方法可以在模板类中使用 IMPLEMENT_DYNCREATE 吗?如果不是,为什么不呢?还有其他解决方案吗? 例子: template class A : public B{ public:
如果我将我的项目从在共享 DLL 中使用 MFC 切换到在静态库中使用 MFC,以下代码将无法编译: class Test : public CObject { public: //DECLA
我是一名优秀的程序员,十分优秀!