1

这是我(可能有点奇怪)的想法,假设我想定义一个std::set对象来包含一些东西以供以后使用,但不幸的是我不确定哪个类型将std::set<not-sure>作为模板 arg 传递给,而这种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你应该指向 a std::set<int>?在不知道这一点的情况下,我也不能使用从to来回static_cast转换。_setvoid *std::set<int>*

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

任何想法都值得赞赏。

4

2 回答 2

5

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

于 2013-01-08T10:15:14.123 回答
0

在我看来,您正在考虑使用 c++ 作为弱类型语言,例如 python。当然可能有一些解决方法,比如使用一些抽象基类等,但我认为底线是在运行时定义类型是违反 c++ 的范式的。

于 2013-01-08T10:30:36.140 回答