C++怎么动态调用类?

2014-12-18 00:24:18 +08:00
 302790951
比如我实力化了 aa bb

当输入aa时调用aa实例
当输入bb时调用bb实例

求解 感谢!
3264 次点击
所在节点    编程
7 条回复
messyidea
2014-12-18 00:39:20 +08:00
你说的是多态么。写一个虚类,然后aa和bb分别继承它,实现虚类的接口。
302790951
2014-12-18 01:07:15 +08:00
@messyidea 不是这样的,比如写一个shop类,里面各种商品属性,然后实例化shop apple,shop orange,我想可以用户输入apple类调用apple的属性,输入orange调用orange的属性
jybox
2014-12-18 01:40:10 +08:00
把名字和指针存到一个 map 里,根据用户输入来调用相应指针。
想在运行时反射变量名,虽然也许可以做到,但在 C++ 里肯定不算优雅。
当然,其实大部分 C++ 代码也没啥优雅可言 ...
302790951
2014-12-18 08:09:23 +08:00
@jybox 感谢!能帮忙写一个例子吗?谢谢
sqbing
2014-12-18 10:07:34 +08:00
这种做法一般不提倡。
一定需要这么用,要么你选错了C++,要么设计有问题……
@jybox 的方法可行的前提是,枚举所以shop类的子类。
fliar
2014-12-18 10:39:29 +08:00
表達要講很多,直接寫偽代碼
class A : public Base { public static const char * = "a"; public static Base* Make(){return new A()};}
class B : public Base { public static const char * = "b"; public static Base* Make(){return new B()};}
那麼你需要一個map來保存所有類的Make,這樣你就可以*map["a“]()來創建類
接下來你一定會想我怎麼自動把Make註冊進map
利用global是可行的,但是有局限性,在靜態庫中global就不能勝任
簡單說,完全自動註冊Make的方法,直接用代碼寫,我不敢說沒有,但是我想很難

反射算是複雜功能,c++標準一直都沒有加進去
heighgun
2014-12-18 13:47:15 +08:00
通常来说不要用反射的思想来写代码况且C++也没有反射,推荐的方法是@messyidea说的那样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/154740

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX