I am trying to create a class/struct that can take in a struct/class of different types that all have the function update(). 
I want to get the update() function and then put it in a vector as a pointer and then call it later, but I'm having trouble putting member function pointers into a vector, but I am having no problem putting 'classless' function pointers into the vector.
How can I put the member function pointers into the vector?
Here is my code
#include <vector>
#include <iostream>
#include <stdio.h>
using namespace std;
struct typeA
{
public:
    int data = 0;
    void update()
    {
        cout << "hello, my data is " << data << endl;
    }
};
struct typeB
{
    float data = 0;
    void update()
    {
        cout << "hi, my data is " << data << endl;
    }
};
class typeListTwo
{
    typedef void(*updaterFunc)();
    vector <updaterFunc> items;
public:
    typeListTwo()
    {
    }
    ~typeListTwo()
    {
        items.~vector();
    }
    void addItem(updaterFunc newItem)
    {
        items.push_back(newItem); //This works
    }
    void doWork()
    {
        for (unsigned int funcIndex = 0; funcIndex < items.size(); funcIndex++)
        {
            items[funcIndex]();
        }
    }
};
class typeList
{
    typedef void(*updaterFunc)();
    vector <updaterFunc> items;
public:
    typeList()
    {
    }
    ~typeList()
    {
        items.~vector();
    }
    template <class Item>
    void addItem(Item newItem)
    {
        items.push_back(newItem.update); //But this does not?
        //newItem.update(); //This also works by itself
    }
    void doWork()
    {
        for (unsigned int funcIndex = 0; funcIndex < items.size(); funcIndex++)
        {
            items[funcIndex]();
        }
    }
};
void aFunc()
{
    cout << "123 hello" << endl;
}
void bFunc()
{
    cout << "456 goodbye" << endl;
}
int main()
{
    typeA aThing;
    typeB bThing;
    typeList listThings;
    typeListTwo listThingsTwo;
    aThing.data = 128;
    bThing.data = -3.234;
    listThings.addItem(aThing);
    listThings.addItem(bThing);
    listThings.doWork();
    listThingsTwo.addItem(aFunc);
    listThingsTwo.addItem(bFunc);
    listThingsTwo.doWork();
    return 0;
}
 
    