保存一个稍后将实例化的“类”

时间:2013-01-08 10:04:28

标签: c++ templates

这是我的(可能有点奇怪)想法,假设我想定义一个std::set对象来包含一些东西以供以后使用,但不幸的是我不确定将哪种类型传递给{{ 1}}作为模板arg,这个std::set<not-sure>类型将通过字符串确定,如下所示:

not-sure

这样,我可以确定class X { public: foo() { char not_sure_type[20]; scanf("%s", not_sure_type); if (strcmp(not_sure_type, "int")) // then std::set<int> else if (// "char") // then std::set<char> } private: void * _set; }; 是否会被实例化,对吧?但是,如何告诉std::set<int>您应该指向_set?在不知情的情况下,我无法使用std::set<int>来回static_cast_set投射void *

那么我可以将std::set<int>*保存为数据成员以供以后使用吗?

任何想法都表示赞赏。

2 个答案:

答案 0 :(得分:5)

如果您在运行时知道set元素的类型(基于say字符串),您可以将指向抽象类型的指针存储到set(set)中,然后使用{{3在包含std :: set的类的构造函数中,根据提供的字符串在运行时实例化元素的实际混凝土类型。 问题在于使用原始指针,因为您需要在具有std :: set的类中进行清理。由于您要使用std :: set,请确保元素的Concrete Type是Comparable。不知道这是不是正确的方式..你说要投入想法......

答案 1 :(得分:0)

听起来像是在考虑使用c ++作为弱类型语言,比如python。确定可能有使用一些抽象基类等的变通方法,但我认为在运行时定义类型的底线是反对c ++的范例。