gpt4 book ai didi

c++ - 指向类模板方法的 void 指针的 vector

转载 作者:搜寻专家 更新时间:2023-10-31 02:11:09 26 4
gpt4 key购买 nike

我在 DataManager 上工作,可以在其中注册组件,这会创建一个 Buffer<Component> .这是可行的,但为了保存缓冲区,我有一个 std::vector<char*> ,因为我不能在同一个 vector 中保存不同类型的类模板。

        //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 成为一个用于创建和删除组件的大包装类。为此,我想保存一个指向新创建的缓冲区的 createComponent 方法的指针。问题是,我不能为给定的方法定义 vector ...

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

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

也许我的方法很愚蠢,用其他方法更容易实现,所以任何建议都会受到赞赏,但如果有办法使这项工作有效,我肯定会更喜欢。

提前致谢!

最佳答案

您从一个未说明且不正确的假设开始。

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

基类可以有纯 virtual 方法,您可以调用 vector 的元素。类模板将实现这些 virtual 方法,可能是根据其模板参数。

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

关于c++ - 指向类模板方法的 void 指针的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44024557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com