在一组模板对象上运行功能

eit*_* 03 2 c++ templates

我正在尝试制作一个具有对象向量的类模板,并且能够在它们上运行对象类的功能,所以我不必循环抛出对象并运行该类,我可以像这样

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正在测试组的类型,是的,它确实具有更新功能。

dar*_*une 5

您的调用看起来不正确(认为:func是指向函数的指针):

替换此行:

(objects[i].func)();
Run Code Online (Sandbox Code Playgroud)

(objects[i].*func)();
Run Code Online (Sandbox Code Playgroud)

话虽这么说,我强烈建议您使用std::function,或者也std::bind不要使用“ 原始函数指针 ”(当您似乎不受第3方库约束时)。