В комментариях вы сказали, что задаете чисто академический вопрос, поэтому позвольте мне дать чисто академический ответ. Вы не можете иметь указатель только на один метод, потому что все эти методы имеют одинаковый тип. Что вы можете сделать, так это сделать их разными:
struct Car
{
struct open_door_tag { };
struct close_door_tag { };
void open_left_door(int nr, open_door_tag = {});
void open_right_door(int nr, open_door_tag = {});
void close_door(int nr, close_door_tag = {});
};
Теперь, если у вас есть указатель
void (Car::*open_that_door_ptr)(int, Car::open_door_tag);
у вас есть некоторые ограничения для назначения:
open_that_door_ptr = &Car::open_left_door; // OK
open_that_door_ptr = &Car::open_right_door; // OK
//open_that_door_ptr = &Car::close_door; // Won't compile
К сожалению (или нет), вы не можете вызывать метод через этот указатель без предоставления тега:
Car car;
(car.*open_that_door_ptr)(2, Car::open_door_tag{});
// or (thanks, @Jarod42)
(car.*open_that_door_ptr)(2, {});
// (car.*open_that_door_ptr)(2); // Won't compile
Примечание. После того, как я опубликовал этот ответ, я увидел комментарий @ Jarod42, который предложил сделать то же самое.