C++怎样将字符串转换成类名

power0811 2013-10-16 10:21:33
C++怎么讲外部传入的字符串变成类名 请指教 多谢
...全文
1695 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2013-10-23
  • 打赏
  • 举报
回复
不要试图在错误的问题上寻找正确解。 如果你一定要反射,就别用C++。
power0811 2013-10-23
  • 打赏
  • 举报
回复
关键是linux环境, 因为传的是一个数字id, 我要根据这个id去实例化不同的对象去处理. 我现在想把这个对应关系写到配置文件里面, 而不是每次添加一个应用, 我都要去改下代码, 去添加一个数字...
秃头披风侠 2013-10-18
  • 打赏
  • 举报
回复
引用 20 楼 fkeujjpdc 的回复:
你查一下C++ 持久化 有很多类似的实现方式,最经典的就是MFC的
可以参考下MFC的运行时类型识别机制.
fkeujjpdc 2013-10-18
  • 打赏
  • 举报
回复
你查一下C++ 持久化 有很多类似的实现方式,最经典的就是MFC的
  • 打赏
  • 举报
回复
你说的是根据外部字符串,决定动态生成哪一个类?这个搞个工厂就可以了。9楼正解。
ken_scott 2013-10-17
  • 打赏
  • 举报
回复
先把目的说清楚 (基本的应用代码)
shiguojie19892 2013-10-17
  • 打赏
  • 举报
回复
我认为没有这个必要吧 我感觉好像在让传入的字符串去写程序的样子。
xiaohuh421 2013-10-17
  • 打赏
  • 举报
回复
可以在自己的代码中实现工厂模式, 然后客户端就不用改了. 或者8楼的类似 java的反射技术.
baichi4141 2013-10-17
  • 打赏
  • 举报
回复
在程序运行的时候,内存中不存在类名这东西 如果你要想根据运行时输入的字符串决定创建对象的类型,只能用ifelse 当然,合理的程序架构可以大大减少工作量和复杂度
ZouXuanXuan456 2013-10-17
  • 打赏
  • 举报
回复
boost对象工厂 更好
ZouXuanXuan456 2013-10-17
  • 打赏
  • 举报
回复
C++对象工厂 去搜索吧 是你想要的
熊熊大叔 2013-10-17
  • 打赏
  • 举报
回复
引用 16 楼 power0811 的回复:
我就是想通过 配置文件 将类名读进来,转换成类名,然后再程序里面是实例化一个, 和6楼所述目的一样 谢谢大家关注 ~
你去google "c++ 反射"吧, 没有你想得那么简单
power0811 2013-10-17
  • 打赏
  • 举报
回复
我就是想通过 配置文件 将类名读进来,转换成类名,然后再程序里面是实例化一个, 和6楼所述目的一样 谢谢大家关注 ~
熊熊大叔 2013-10-17
  • 打赏
  • 举报
回复
LZ你说的这种做法叫反射, 在现在的脚本语言中属于基本功能, 但在C++中没有被直接支持. 一个简单的做法, 你可以做一个string到type的map, 然后主程序提供一个注册接口和一个查找接口. 谁实现的类有可能被这种方式实例化, 让他自己调注册接口
赵4老师 2013-10-17
  • 打赏
  • 举报
回复
Code Generation
Falleyes 2013-10-17
  • 打赏
  • 举报
回复
typedef别名应该可以吧
worldy 2013-10-16
  • 打赏
  • 举报
回复
lz是否要在运行的时候根据输入的文本创建对应的类对象?
power0811 2013-10-16
  • 打赏
  • 举报
回复
麻烦您能说的详细些么??
zhaokai115 2013-10-16
  • 打赏
  • 举报
回复
virtual constructor
加载更多回复(3)
主要特性Java 语言是简单的:Java 语言的语法与 C 语言和 C++ 语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java 丢弃了 C++ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java 语言不使用指针,而是引用。并提供了自动分配和回收内存空间,使得程序员不必为内存管理而担忧。Java 语言是面向对象的:Java 语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为 implements)。Java 语言全面支持动态绑定,而 C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。Java语言是分布式的:Java 语言支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括 URL、URLConnection、Socket、ServerSocket 等。Java 的 RMI(远程方法激活)机制也是开发分布式应用的重要手段。Java 语言是健壮的:Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。对指针的丢弃是 Java 的明智选择。Java 的安全检查机制使得 Java 更具健壮性。Java语言是安全的:Java通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。除了Java 语言具有的许多安全特性以外,Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。Java 语言是体系结构中立的:Java 程序(后缀为 java 的文件)在 Java 平台上被编译为体系结构中立的字节码格式(后缀为 class 的文件),然后可以在实现这个 Java 平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。Java 语言是可移植的:这种可移植性来源于体系结构中立性,另外,Java 还严格规定了各个基本数据类型的长度。Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。Java 语言是解释型的:如前所述,Java 程序在 Java 平台上被编译为字节码格式,然后可以在实现这个 Java 平台的任何系统中运行。在运行时,Java 平台中的 Java 解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。Java 是高性能的:与那些解释型的高级脚本语言相比,Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于 C++。Java 语言是多线程的:在 Java 语言中,线程是一种特殊的对象,它必须由 Thread 类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为 Thread(Runnable) 的构造子类将一个实现了 Runnable 接口的对象包装成一个线程,其二,从 Thread 类派生出子类并重写 run 方法,使用该子类创建的对象即为线程。值得注意的是 Thread 类已经实现了 Runnable 接口,因此,任何一个线程均有它的 run 方法,而 run 方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java 语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为 synchronized)。Java 语言是动态的:Java 语言的设计目标之一是适应于动态变化的环境。Java 程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。

64,644

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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