Я хочу хранить указатели функций внутри std::array
, но, попробовав разные подходы, я все еще не могу даже скомпилировать свою программу.
Вот версия, которая не выдает ошибок, пока я ее не скомпилирую.
namespace logic {
class Chance : public Field {
std::array<void(logic::Chance::*)(), 18> m_redChances;
public:
Chance(ChanceType type);
void redChance1();
void redChance2();
...
void redChance18();
};
}
logic::Chance::Chance(ChanceType type)
: Field(false), m_type(type)
{
m_redChances[0] = redChance1;
m_redChances[1] = redChance2;
....
m_redChances[17] = redChance18;
}
Это дает мне
нестандартный синтаксис; используйте '&' для создания указателя на элемент
Пытался сделать что-то подобное тогда
m_redChances[0] = &redChance1;
Завершено с
'&': недопустимая операция над выражением связанной функции-члена
Пытался объявить мой массив вот так
std::array<void(*)(), 18> m_redChances;
значение типа "void(logic::Chance::)()" не может быть присвоено объекту типа "void()()"
Редактировать: Итак, после реализации вот так: m_redChances[0] = &Chance::redChance1;
это работает. Как я могу на самом деле вызвать эту функцию (если это имеет значение, я вызываю ее из другой функции-члена).
Я пробовал все виды вещей, таких как:
void logic::Chance::activate(logic::Player& player){
m_redChances[0];
*m_redChances[0];
m_redChances[0]();
(*m_redChances[0])();
}
Только первая строка не подчеркнута и не помечена как ошибка еще до того, как я скомпилирую, но она не вызывает мою функцию. Как я могу достичь этого тогда?
m_redChances[0] = &Chance::redChance1;
- person 眠りネロク   schedule 20.01.2018&Chance::redChance1
,&Chance::redChance2
и т. д. - person R Sahu   schedule 20.01.2018