你如何处理这个问题(接口+模板+重用代码)

时间:2011-01-13 16:58:28

标签: c++

对于奇怪的话题感到抱歉,但不知道如何完全合成我的问题。这是问题所在:

我有一组包含类型的std :: vector的类。对于模板化来说,它是一个很好的候选者:

template <typename T>
class Container
{
    T createObject() { T* obj=new T; _objects.push_back(obj); }
    std::vector<T> _objects;
}

当我需要将这些容器存储在异质地图中时,问题就来了。它们是模板,因此在初始化之前它们不存在。我已经考虑过从一个虚拟IContainer派生Container来获得一个很好的起点,但是你看到createObject需要被模板化,所以我可以将IContainers添加到hetrogenous map中,但我将无法调用createObject()并且不想做一个static_cast。有人可以为此提出解决方案吗?

提前致谢, 阿马拉尔。

1 个答案:

答案 0 :(得分:0)

听起来你可能会追问boost::any之类的东西。见http://www.boost.org/doc/libs/1_49_0/doc/html/any/s02.html

总结:

class Container
{
    std::vector<boost::any> _objects;

public:   
    template <class T>
    void Add(const T& t) { _objects.push_back(t); }
}

在您的情况下,您不再需要为类添加模板,只需添加函数。

请注意,使用向量中的对象变得很困难,因为您不知道它们是什么类型 - 只要您想要使用它们,就必须进行测试以查看它是什么类型。

你需要更好地解释你想要做什么 - 但我猜你会想要实际使用boost::any

相关问题