Здравствуйте!
Эта проблема, наверное, решена не одним программистом.
Есть функции fun1(), fun2(),...,fun100();
Как сгенерировать название необходимой в данный момент функции.
Поясню.
for(int i=1; i<=100; i++)
{
"fun"+i - должно вызывать соответствующую fun, т.е.
"fun"+1 - преобразуется в "fun1" и вызывает fun1();
"fun"+2 - преобразуется в "fun2" и вызывает fun2(); и.т.д.
}
Естественно, напрямую это не сделать. Может, кто-нибудь подскажет вариант решения проблемы?
Это элементарно решается с помощью switch(), но функций - 100 штук, так что придется писать 100 case
Можно использовать массив(или вектор) указателей на функции, но и в этом случае придется эти 100 функций заносить туда вручную, т.е. array_fun[]={fun1, fun2,........fun100};
ПО-встроенное. Компилятор - Linux, без сторонних библиотек(типа boost и др.), только средствами C/C++.
И еще! Выбор функции должен происходить во время исполнения, поэтому макросы не годятся!!!
Сгенерировать имя функции
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Выход один - только массив указателей на функции. По другому никак. В любом случае нужно иметь привязку к указателю на функцию для того, чтобы её вызвать. Сделать call по имени не возможно даже с логической точки зрения: в релизных экзышниках имена функций отсутствуют (есть только их адреса).
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.