c++ - 保存一个 'class',稍后实例化

标签 c++ templates

这是我(可能有点奇怪)的想法,假设我想定义一个 std::set对象包含一些供以后使用的东西,但不幸的是我不确定哪种类型将传递给 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>* , 来回。

我可以保存std::set<int>吗?就像一个数据成员供以后使用?

任何想法都会受到赞赏。

最佳答案

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

关于c++ - 保存一个 'class',稍后实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14212475/

相关文章:

c++ - QTabBar 下的小部件带有不需要的框架

c++ - 实例化后的显式特化

python - 如何在 Django 中使用模板调用模型上的自定义方法?

c++ - BOOST_CHECK_CLOSE_FRACTION 问题

c++ - 我收到 [Error] 'Eintrag' does not name a type 我不知道为什么

c++ - 使用无符号值时保护 Cin

c++ - 模板递归中的非类型模板参数缩小

c++ - 使用透明 std 函数对象时,我们还需要写空尖括号吗?

C++ 17 : Using alias template bug in gcc?

c++ - C++ 标准库中是否有用于比较迭代器类别的工具