przekazanie zmiennych przez funkcję pośredniczącą

0

czy jest jakiś sposób żeby funkcja_52 robiła to samo co funkcja_12 czyli pobierała kilka danych z funkcji pośredniczącej w której w zależności od flag dane się zmieniają w różnych miejscach programu przykładowy program:

 

#include "stdafx.h"
#include "iostream"
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <conio.h> 
#include <iostream>
#include <windows.h>

using namespace std;
//////////////////////////////
//////////////////////////////
void funkcja_11(int &a,int &b,int &c);
void funkcja_12(void (*wskaznik_na_funkcje)(int&,int&,int&),int &a1,int &b1,int &c1); 
//////////////////////////////
void funkcja_51(int &a,int &b,int &c);
void funkcja_52(void (*wskaznik_na_funkcje)(int&,int&,int&)); 
//////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
	int nowy_nr1=2,nowy_nr2=5,nowy_nr3=7;
	cout<<"stary_nr1="<<nowy_nr1<<" stary_nr2="<<nowy_nr2<<" stary_nr3="<<nowy_nr3<<endl;
	funkcja_12(funkcja_11,nowy_nr1,nowy_nr2,nowy_nr3);
	cout<<"nowy_nr1="<<nowy_nr1<<" nowy_nr2="<<nowy_nr2<<" nowy_nr3="<<nowy_nr3<<endl;
	cout<<"koniec testu 1 z 2 "<<endl;
	system("pause");
	int nr1=10,nr2=12,nr3=14;
	cout<<"nr1="<<nr1<<" nr2="<<nr2<<" nr3="<<nr3<<endl;
	funkcja_51(nr1,nr2,nr3);
	funkcja_52(funkcja_51);
	cout<<"koniec testu 2 z 2 "<<endl;
	system("pause");
	return 0;
}//int _tmain
//////////////////////////////
void funkcja_11(int &a,int &b,int &c)
{
	a=a+5;
	b=b-2;
	c=c+3;
}
//////////////////////////////
void funkcja_12(void (*wskaznik_na_funkcje)(int&,int&,int&),int &a1,int &b1,int &c1)
{
(*wskaznik_na_funkcje)(a1,b1,c1);
}
//////////////////////////////
void funkcja_51(int &a,int &b,int &c)
{
cout<<"przechowywalnia"<<endl;
cout<<"a="<<a<<" b="<<b<<" c="<<c<<endl;	
}
//////////////////////////////
void funkcja_52(void (*wskaznik_na_funkcje)(int&,int&,int&))
{
	int pobrany_nr1=0,pobrany_nr2=0,pobrany_nr3=0;
	(*wskaznik_na_funkcje)(pobrany_nr1,pobrany_nr2,pobrany_nr3);
	cout<<"pobrany_nr1="<<pobrany_nr1<<" pobrany_nr2="<<pobrany_nr2<<" pobrany_nr3="<<pobrany_nr3<<endl;
}
0

Użyj 'static'. Dzięki temu będziesz mógł odwołać się do potrzebnych informacji. Możesz też użyć funktorów (struct z operatorem ()).

0

ok na razie z static zrobiłem to i działa:
(jednak to jest za pomocą szablonu z tej innej funkcji)

 

#include "stdafx.h"
#include "iostream"
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <conio.h> 
#include <iostream>
#include <windows.h>

using namespace std;

//////////////////////////////
void funkcja_karty_w_rece_1(int &karta1,int &karta2,int &karta3,int &karta4,int &karta5,int flaga);
void funkcja_karty_w_rece_2(void (*wskaznik_na_funkcje)(int&,int&,int&,int&,int&,int),int &karta1_1,int &karta2_1,int &karta3_1,int &karta4_1,int &karta5_1);
void obliczenie_prawdopodobienstwo_start_();
//////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
	int karta1=5,karta2=1,karta3=10,karta4=50,karta5=25,flaga=1;//1=zapis,2=odczyt
	cout<<"karta1="<<karta1<<" karta2="<<karta2<<" karta3="<<karta3<<" karta4="<<karta4<<" karta5="<<karta5<<endl;
	funkcja_karty_w_rece_1(karta1,karta2,karta3,karta4,karta5,flaga);
	obliczenie_prawdopodobienstwo_start_();
	system("pause");
	return 0;
}//int _tmain
//////////////////////////////
void funkcja_karty_w_rece_1(int &karta1,int &karta2,int &karta3,int &karta4,int &karta5,int flaga)
{
	int static temp1=0,temp2=0,temp3=0,temp4=0,temp5=0;
	if(flaga==1)
	{
	temp1=karta1;
	temp2=karta2;
	temp3=karta3;
	temp4=karta4;
	temp5=karta5;
	}
	if(flaga==2)
	{
	karta1=temp1;
	karta2=temp2;
	karta3=temp3;
	karta4=temp4;
	karta5=temp5;
	}
}
void funkcja_karty_w_rece_2(void (*wskaznik_na_funkcje)(int&,int&,int&,int&,int&,int),int &karta1_1,int &karta2_1,int &karta3_1,int &karta4_1,int &karta5_1,int flaga)
{
	(*wskaznik_na_funkcje)(karta1_1,karta2_1,karta3_1,karta4_1,karta5_1,flaga);
}
//////////////////////////////
void obliczenie_prawdopodobienstwo_start_()
{
int karta1=0,karta2=0,karta3=0,karta4=0,karta5=0,flaga=2;//1=zapis,2=odczyt
funkcja_karty_w_rece_2(funkcja_karty_w_rece_1,karta1,karta2,karta3,karta4,karta5,flaga);//funkcja posredniczy w przekazywaniu danych
cout<<"w void obliczenie_prawdopodobienstwo_start_();"<<endl;
cout<<"karta1="<<karta1<<" karta2="<<karta2<<" karta3="<<karta3<<" karta4="<<karta4<<" karta5="<<karta5<<endl;
}
//////////////////////////////

1 użytkowników online, w tym zalogowanych: 0, gości: 1