Я пытаюсь создать шаблон класса, который будет иметь вектор объектов и который сможет запускать функцию класса объектов на них, поэтому мне не нужно зацикливать объекты и запускать класс, который я мог бы простоПраво что-то вроде
allObjects.runFunc(objectsType::someFunc);
в классе я хочу 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)();
}
}
ошибка, которую я получаю: func не является членом gameObject, где gameobject - это тип, на котором я тестирую группу,и да, у него есть функция обновления.