不继承CObject 如何动态创建自定义类对象?

smallfishff 2009-03-09 10:44:26
class a
{}
class b : public a
{}
class c : public a
{}

function
{
CString className = _T("b");
a* object = new a(className);
}

根据类名生成新对象 这样的方式如何能够实现?
...全文
135 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2009-03-09
  • 打赏
  • 举报
回复
我的意思就是在每个类中定义一个静态函数,用来构造新对象并返回指针,可以用类似CRuntimeClass的静态结构成员保存函数地址、类名、基类等信息,可以写成宏的形式。程序中通过类名可以访问该静态结构成员,也可以在函数间传递结构指针。
如果用字符串的形式,就只能是逐个比较,MFC的动态构造也是这样做的。
hemiya 2009-03-09
  • 打赏
  • 举报
回复
可以用typeid。
smallfishff 2009-03-09
  • 打赏
  • 举报
回复
也不是宏替换 .
qiangorqiang 2009-03-09
  • 打赏
  • 举报
回复
你可以维护一个类名与创建函数的map,当有新来时把它加入map;
一下是伟代码:
map<string, (void *)(*)> createMap;

void * crateA()
{
return new A;
}

void * crateB()
{
return new B;
}

map.Add("A", createA);
map.Add("B", createB);

void * create(string name)
{
(void *)(*) c = map.find(name);
return c();
}
会思考的草 2009-03-09
  • 打赏
  • 举报
回复
CObject支持动态创建是因为它添加了支持,自己添加一下不就行了?
smallfishff 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cnzdgs 的回复:]
用字符串不行,用类名可以。
[/Quote]

那么就不能动态变化了.

那我也想了解直接使用类名如何生成.当然不需要有判断.
嗷嗷叫的老马 2009-03-09
  • 打赏
  • 举报
回复
路过..........
cnzdgs 2009-03-09
  • 打赏
  • 举报
回复
用字符串不行,用类名可以。
  • 打赏
  • 举报
回复
a* object;
if( className == _T("b") )
object = new b;
else if( className == _T("c") )
object = new c;

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧