Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2016, 20:59   #1
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию В функцию с переменным числом параметроы передать указатели на функцию

Добрый вечер. По заданию нужно в функцию с переменным числом параметров передать имя функций, которые нужно вызвать. Долго думала,как имея только имя, можно вызвать функцию, с таким раньше не сталкивалась. Еще сказано,что первый параметр - указатель на строку с названиями функций, второй параметр -кол-во параметров. Функции нужно вызвать через указатель на них.
Код:
int Func1(int a)
{

	return 0;
}
int Func2(int a)
{

	return 0;
}
void MyFunc(char *s,int k,int (*fun)(int),...) 
{
	int *p;
	 va_list uk_arg;
      va_start(uk_arg,fun); 
	  p=va_arg(uk_arg,int*);
 (fun(10)); 
	   va_end(uk_arg);    
}
int main()

{
	char str[]="Func1,Func2"; //для первого параметра
	//int (*pf1)(int) = &Func1;
	//int (*pf2)(int) = &Func2;
	MyFunc(str,2, Func1,Func2);
//pf1(10); // Вызывается f(10)
	return 0;
}
Проблема в вызове функции с помощью указателя. Как сделать вызов через va_arg ?Или как-то по другому можно сделать вызов?Спасибо
Вероника99 вне форума Ответить с цитированием
Старый 04.10.2016, 22:48   #2
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Уже есть такое,но я дальше не понимаю,как с помощью указателя , вызвать вторую функцию func2. Ведь передаю в funcwithfuncpointer(str,2,func,func 2); 4 параметра, func понятно как вызывать, а вот этот скрытый func2 без понятия. Подскажите пожалуйста

Код:
int n=0,m=0;
int func(char *s, int a)
{
	
 cout<<"\n"<<s<<":n/m="<<(n/m)*1.0<<endl;

    return 0;
}
 int func2(char *s, int a)
{
   cout<<"\n"<<s<<":n%m="<<(n%m)*1.0<<endl;
    return 0;
}
int funcwithfuncpointer(char *s, int a, int(*f)(char *, int),...)
{
    cout <<"call "<< s <<" "<< a <<" f() = "<<f(s, a)<<'\n';

	  return 0;
}
int main()

{
	char str[]="Func1,Func2";
	int (*pf1)(char*,int) = &func;
	int (*pf2)(char *,int) = &func;
	 cout<<"Enter n,m for n/m, n%m"<<endl;
	 cin>>n>>m;
	//MyFunc(str,2, Func1,Func2);
	funcwithfuncpointer(str,2,func,func2);

//pf1(10); // Вызывается f(10)
	return 0;
}
Вероника99 вне форума Ответить с цитированием
Старый 05.10.2016, 14:22   #3
Максай
Пользователь
 
Аватар для Максай
 
Регистрация: 21.07.2008
Сообщений: 40
По умолчанию

Добрый вечер. То, что Вы хотите, можно написать следующим образом:
Код:
#include <cstdarg>
#include <cstring>

// ....

int funcwithfuncpointer(char *s, int a, ...)
{
    char* pch = strtok( s, "," );

    va_list args;
    va_start( args, a );

    for( int i = 0; i < a; i++ )
    {
        int (*pf)(char*, int) = va_arg( args, int (*)(char*, int) );
        pf( pch, 0 ); // Я не знаю, что должно передаваться вторым параметром в вызываемые
                      // по указателю функции, в Ваших функциях он не используется, поэтому пишу 0.
        pch = strtok( NULL, "," );
    }

    va_end( args );

    return 0;
}
Цитата:
Сообщение от Вероника99 Посмотреть сообщение
Еще сказано,что первый параметр - указатель на строку с названиями функций, второй параметр -кол-во параметров. Функции нужно вызвать через указатель на них.
Первый параметр, в общем-то, не требуется для вызова функций, необходимо только количество параметров и сами параметры. Ну это так, к слову.

Последний раз редактировалось Максай; 05.10.2016 в 14:28.
Максай вне форума Ответить с цитированием
Старый 05.10.2016, 15:44   #4
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Ради бога, скинь уже дословное и полное исходное задание + темы последних 3-4 лекций
"вызов по имени" - это рефлексия, которую вы ну не могли проходить, судя по др. темам.....
кроме того, зачем тогда 1й параметр, имя, если потом идёт указатель на функцию? сплошные не состыковки и ощущение, что задачу дали одну, а ты поняла другое, пересказала своими словами и мы тут видим совсем не ту задачу
GreenWizard вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели на функцию WorldMaster Visual C++ 2 01.04.2015 14:55
Указатели на функцию SteAlzzer Общие вопросы C/C++ 3 05.11.2011 15:16
Как передать указатель на функцию в функцию WIN32APIist Общие вопросы C/C++ 1 27.01.2011 10:35
Как создать функцию с переменным кол-во параметров? VintProg Общие вопросы Delphi 12 11.08.2009 12:49
Указатели на функцию. prikolist Общие вопросы C/C++ 9 05.06.2009 15:34