Вы не можете использовать обычные указатели на методы, вы должны использовать указатели на методы, которые имеют причудливый синтаксис:
void (MyClass::*method_ptr)(int x, int y);
method_ptr = &MyClass::MyMethod;
Это дает вам указатель на метод MyClass - MyMethod. Однако это не настоящий указатель в том смысле, что это не абсолютный адрес памяти, это в основном смещение (более сложное, чем из-за виртуального наследования, но это зависит от реализации) класса. Таким образом, чтобы использовать указатель на метод, вы должны предоставить ему класс, например:
MyClass myclass;
myclass.*method_ptr(x, y);
или
MyClass *myclass = new MyClass;
myclass->*method_ptr(x, y);
Конечно, в этот момент должно быть очевидно, что вы не можете использовать указатель метода для указания на конструктор объектов. Чтобы использовать указатель на метод, вам нужно иметь экземпляр класса, чтобы его конструктор уже был вызван! Так что в вашем случае, вероятно, лучший способ сделать это - предложение фабрики объектов Майкла.