我正在尝试制作一个具有对象向量的类模板,并且能够在它们上运行对象类的功能,所以我不必循环抛出对象并运行该类,我可以像这样
allObjects.runFunc(objectsType::someFunc);
Run Code Online (Sandbox Code Playgroud)
在课堂上我想要3个命令:
add
-将项目添加到组中 remove
-删除物品 runFunc(someFunc)
-那是最重要的一个,我希望它someFunc
在该组中的所有对象上 运行并且该类将具有一个变量:
std::vector<Object> objects
-将存储所有对象
所以我在互联网上看了很多,还没有找到我需要的东西,但是我尝试使用std :: bind并遇到了一些非常奇怪的故障。
类(在.h文件中):
#pragma once
#include <vector>
template<class Object>
class Group {
public:
void add(Object &object);
void runFunc(void(Object::* func)(void));
private:
std::vector<Object> objects;
};
template<class Object>
inline void Group<Object>::add(Object &object)
{
objects.push_back(object);
}
template<class Object>
inline void Group<Object>::runFunc(void (Object::* func)(void))
{
for (int i = 0; i < objects.size(); i++)
{
(objects[i].func)();
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是func不是gameObject的成员,其中gameobject是Im正在测试组的类型,是的,它确实具有更新功能。
您的调用看起来不正确(认为:func
是指向函数的指针):
替换此行:
(objects[i].func)();
Run Code Online (Sandbox Code Playgroud)
与
(objects[i].*func)();
Run Code Online (Sandbox Code Playgroud)
话虽这么说,我强烈建议您使用std::function
,或者也std::bind
不要使用“ 原始函数指针 ”(当您似乎不受第3方库约束时)。
归档时间: |
|
查看次数: |
44 次 |
最近记录: |