如何根据字符串定义变量。我已经定义了很多类。但是我想根据一些字符串创建这个类的变量。
代码看起来像这样。
class AA {};
class BB {};
class CC {
CC(void *pt);
virtual ~CC();
};
......
void test(char *ss,void *pt=NULL) {
//??????How to do?
}
int main() {
a1=test("AA"); //a1=new AA();
a2=test("AA"); //a2=new AA();
b1=test("BB"); //b1=new BB();
c1=test("CC",pt); //c1=new CC(pt);
}
另外,您可以将其视为URL和句柄函数.std :: map是根据string获取类实例的常用方法。但是无法为变量创建新实例。我希望根据字符串获得一个新实例。
答案 0 :(得分:5)
C ++是一种强类型语言,因此现在不可能这样做。
最好的情况是,您使用AA
,BB
,CC
的公共基类,然后使用factory。你不能只写:
a1=test("AA"); //a1=new AA();
a2=test("AA"); //a2=new AA();
b1=test("BB"); //b2=new BB();
c1=test("CC",pt); //b2=new CC(pt);
没有为变量定义类型。
例如:
class Base{};
class AA : public Base {};
class BB : public Base {};
Base* create(const std::string& what)
{
if (what == "AA")
return new AA;
if (what == "BB")
return new BB;
return NULL;
}
int main()
{
Base* a;
a = create("AA");
}
或者,您应该使用智能指针。如果你不这样做,你将不得不自己管理记忆。
答案 1 :(得分:1)
您可能希望函数返回一些内容,void*
或最好是指向公共库的[智能]指针。字符串应该以{{1}}或char const*
传递。在函数中,您可以直接比较参数并调用相应的分配,也可以创建std::string const&
以根据字符串查找工厂函数。
答案 2 :(得分:0)
也许不使用类型的字符串名称 - 使用类型。为此 - 使用模板。
class AA {};
class BB {};
class CC {
public:
CC(void *pt) {}
virtual ~CC() {}
};
template <class T>
T* test() {
return new T();
}
template <class T>
T* test(void *pt) {
return new T(pt);
}
int main() {
void* pt;
AA* a1=test<AA>(); //a1=new AA();
AA* a2=test<AA>(); //a2=new AA();
BB* b1=test<BB>(); //b1=new BB();
CC* c1=test<CC>(pt); //c1=new CC(pt);
}