На данный момент у меня возникла следующая проблема:
Я хочу назначить объект класса также структуру карты
Моя цель: Если я вызываю карту с идентификаторами внутри скобок, функция должна запускаться!
Я знаю, что следующий подход не работает. Но я был бы очень любезен, мне кто-нибудь может дать идею или совет, как я могу реализовать этот подход ...
Вот пример:
#include <map>
#include <functional>
#include <iostream>
class start {
public:
void sayhello() {
std::cout << "Hallo!!" << std::endl;
}
};
class end {
public:
void saybye() {
std::cout << "Bye!" << std::endl;
}
}
typedef void (*method)(void);
int main() {
std::map<int, std::map<int, std::map<int, method>>> myMap;
myMap[1][5][10] = start::sayhello;
myMap[2][1][20] = end::saybye;
// // usage:
myMap[1][5][10]();
myMap[2][1][20]();
}
Большое спасибо за вашу помощь! <3
Вы назначаете тег «oop». Вероятно, решение должно быть СОВЕРШЕННО иным, разработанным в ООП. Но в чем настоящая проблема? (карта референсов, производных классов, но трудно угадать, что ты хочешь). Сегодняшняя попытка полностью исключена из объектно-ориентированного программирования.





Обычно функция-член вызывается из экземпляра своего класса:
class Bar
{
public:
void fun() {.....};
};
//somewhere in your code
Bar b;
b.fun();
Хорошая новость заключается в том, что вы можете избежать экземпляра класса, сделав функцию статический
class Bar
{
public:
static void fun() {.....};
};
//somewhere in your code
Bar::fun();
Благодарность! Но как я могу вставить различные статические функции в std :: map?
Просто введите статический перед двумя функциями. И исправьте опечатку: добавьте ; в конец endclass.
но когда я использую static, я должен создать экземпляр класса. Нет ли прямого решения? Чтобы создать экземпляр внутри карты?
@ N.Men Смысл "статики" в том, что вы избегаете создания экземпляров. См. Ответ Шриканта, он исправил ваш код, и теперь он работает.
Код в текущем виде работать не будет.
Доступны два подхода:
Код для 2-го подхода приведен ниже:
#include <map>
#include <functional>
#include <iostream>
using namespace std;
class start {
public:
static void sayhello() {
std::cout << "Hallo!!" << std::endl;
}
};
class end {
public:
static void saybye() {
std::cout << "Bye!" << std::endl;
}
};
typedef void (*method)(void);
int main() {
std::map<int, std::map<int, std::map<int, method>>> myMap;
myMap[1][5][10] = start::sayhello;
myMap[2][1][20] = end::saybye;
// // usage:
myMap[1][5][10]();
myMap[2][1][20]();
return 0;
}
Вы можете держать
std::functionна своей карте.