向类模板方法

时间:2017-05-17 12:13:42

标签: c++ visual-studio c++11 pointers vector

我正在处理DataManager,其中可以注册Components,这会创建Buffer<Component>。这是有效的,但是为了保存缓冲区,我有一个std::vector<char*>,因为我无法在同一个向量中保存不同类型的类模板。

        //register Components and return reference to them (Pre-Init Phase)
    template<class TComponent>
    ComponentID registerComponent(std::string Name = "",int ComponentNr = COMPONENTNR) {

        //Create Buffer<TComponent> with rising ID Counter
        ComponentContainer<TComponent>* t = new ComponentContainer<TComponent>(_componentIDCounter++, ComponentNr);

        //Add Buffer ptr to vector
        _container.push_back(reinterpret_cast<char*>(t));

        //return ComponentID
        return t->getComponentID();
    };

现在我希望DataManager成为一个用于创建和删除组件的大包装类。为此我想保存一个指向新创建的Buffer的createComponent方法的指针。 问题是,我不能为给定的方法定义一个向量...

typedef void (*CreatesPtr)(int);
...
CreatesPtr f = t->createComponent;

...哪个不起作用,因为它认为我想创建指向成员的指针,而不是方法,或者我可以使用 std :: bind 来绑定它,因为std :: bind ,但有了这个我无法为我想要调用每个类模板的函数定义一个向量。

也许我的方式只是简单的愚蠢而且更容易实现其他方式,所以任何建议都值得赞赏,但如果有办法让这项工作我肯定会更喜欢。

提前致谢!

1 个答案:

答案 0 :(得分:2)

你是以未说明和不正确的假设开始的。

类模板可以从非模板基类派生。您可以在向量中存储指向此基类的指针。

基类可以有纯virtual方法,您可以在向量的元素上调用它们。类模板将实现这些virtual方法,可能就其模板参数而言。

在您的情况下,看起来createComponent将是虚拟方法。