我有一个包含类名的字符串。 我想为该类创建一个实例..
即
class Test
{}
主要功能中的
String str="Test";
我必须仅使用str变量创建Test类的实例...
答案 0 :(得分:3)
你必须使用一种叫做反射的技术。这是Wikipedia article on Reflection (computer programming)。
对于Java:查看Class
class,特别是Class.newInstance
method。
这是一个简单的“Hello World”程序,用于演示:
public class Test {
public static void main(String[] args) throws Exception {
String className = "Test";
Class c = Class.forName(className);
Object o = c.newInstance();
((Test) o).method();
}
public void method() {
System.out.println("Hello World");
}
}
答案 1 :(得分:2)
使用Java,您需要使用Reflection API:
String className = "Test";
Test newInst = (Test)Class.forName(className).newInstance();
C ++没有与Java相当的本机Reflection,因此您需要自己实现它:
void* newInstance(std::string className) {
if (className == "Test") {
return new Test();
}
return 0;
}
答案 2 :(得分:1)
你不能在C ++中本地这样做。将需要通过使用一些结构(可能是查找表)来模拟反射,这些结构将字符串与类型相关联,这将为您创建对象。
答案 3 :(得分:1)
Class.forName(str).newInstance();
上面的代码返回该类的对象。确保'str'具有完全限定的类名。
答案 4 :(得分:1)
在Java中,默认情况下您支持反射。在本机C ++中,您没有反射。如果您需要使用C ++进行反思,请尝试使用Qt等框架。
答案 5 :(得分:0)
试
Object obj = Class.forName(str).newInstance();
答案 6 :(得分:0)
Test t = (Test) Class.forName(className).newInstance()
答案 7 :(得分:0)
您尝试描述的通用OOP技术称为抽象工厂模式,您可以在其中读取数据,然后在运行时决定要创建的类的类型。
通常,该类将来自已知的基础,否则它必须是某种变体类型。
对于从已知基础派生的类,您将继续调用其虚拟/抽象方法(多态)。对于变体类型,您可能会“访问”它。