C ++访问存储在std :: vector中的实例的方法,该实例包含多种类型的模板类

时间:2016-11-11 20:07:09

标签: c++ templates vector

我希望访问存储在向量中的GraphProperties类的方法 setProperty 。由于我的类GraphProperties是一个模板,我必须定义VectorPro父类的GraphProperties。但是,不允许在 GraphPropertiesAnyType 中定义虚拟方法模板。是否有任何解决方案可以从存储在向量中的元素访问 setProperty 方法。

class GraphPropertiesAnyType {
public:
    GraphPropertiesAnyType() = default ;

    template<typename P>
    virtual void setProperty(int v, P property) = 0; // not allowed 
};

template <typename P>
class GraphProperties : public GraphPropertiesAnyType
{
public:

    GraphProperties() = default ;

    GraphProperties(std::string name): name(name) {};

    void setProperty(int v, P property)
    {
        auto p = std::make_pair(v.first, property);
        this->property.insert(p);
    }

private:
    std::string name;
    std::map <int, P> property;
};

主要

int main(int argc, char **argv) {
      std::vector<std::unique_ptr<GraphPropertiesAnyType> > v ;
      std::unique_ptr<GraphProperties<int, int, int> > elem;
      v.push_back(elem); // work fine
      v[0].setProperty(5, 10); // my issue is there
}

0 个答案:

没有答案