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

21 Авг 2019 в 07:09
184 +1
1
Ответы
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 Апр 2024 в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир