Как в std::map поместить указатели на функции класса? Допустим у меня есть классclass Foo
{
public:
static Foo *fromFoo();
static Foo *fromBar();
};
Как создать такой ассоциативный массив, который будет содержать указатели на функции, чтобы я мог динамически создавать объекты из строки, без лапши вида if(str == "foo") {} ....

21 Авг 2019 в 07:09
160 +2
0
Ответы
1

Вы можете использовать std::map со строковыми ключами и указателями на функции класса в качестве значений. Вот пример кода, который показывает, как это можно сделать:

#include <iostream>
#include <map>
#include <string>
class Foo
{
public:
static Foo* fromFoo() {
return new Foo();
}
static Foo* fromBar() {
return new Foo();
}
};
typedef Foo*(*FooCreateFunction)();
int main() {
std::map<std::string, FooCreateFunction> createFunctions;
createFunctions["foo"] = &Foo::fromFoo;
createFunctions["bar"] = &Foo::fromBar;
std::string input;
std::cout << "Enter type (foo or bar): ";
std::cin >> input;
if (createFunctions.find(input) != createFunctions.end()) {
Foo* newFoo = createFunctions[input]();
std::cout << "Created new Foo object" << std::endl;
} else {
std::cout << "Invalid type entered" << std::endl;
}
return 0;
}

В этом примере создается ассоциативный массив createFunctions, где ключом является строка и значением - указатель на функцию создания объекта класса Foo. Затем пользователь вводит строку для выбора типа объекта Foo, и программа использует ключ для доступа к нужной функции создания объекта.

Пожалуйста, убедитесь, что вы освобождаете память, занимаемую объектами Foo, созданными с помощью этих функций.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 211 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир