[Resolvido] Ponteiro de funções
Pasteninja: http://www.pasteninja.com/paste/2310
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
template<class T>
void menu(vector<T> options, vector<void (*)(T)> funcVector);
void locationFunction(string str);
void pipelineFunction(string str);
int main()
{
vector<string> menuOptions;
vector<void (*)(string)> funcVector;
menuOptions.push_back("Location");
menuOptions.push_back("Pipeline");
void (*funcPtr1)(string);
void (*funcPtr2)(string);
funcPtr1 =& locationFunction;
funcPtr2 =& pipelineFunction;
funcVector.push_back(funcPtr1);
funcVector.push_back(funcPtr2);
menu<string>(menuOptions, funcVector);
return 0;
}
template<class T>
void menu(vector<T> options, vector<void (*)(T)> funcVector){
if(funcVector.size() != options.size()) return;
typename vector<T>::iterator begin = options.begin();
typename vector<T>::iterator end = options.end();
typename vector<T>::iterator it;
cout << "What information would you enter?\n";
for(it = begin;it < end;it++){
cout << (*it) << "\n";
}
cout << "--------" << endl;
T chosen;
cin >> chosen;
sort(begin, end);
int res = (lower_bound(begin, end, chosen) - begin);
if(res > static_cast<int>(options.size())) menu(options, funcVector);
else (funcVector.at(res))(chosen);
}
void locationFunction(string str){
cout << "Location function" << endl;
}
void pipelineFunction(string str){
cout << "Pipeline function" << endl;
}
Queria saber como simplificar da linha 19 à 24 (dar um push_back direto na referencia à função ao invés de fazer um ponteiro e tal...).
Valew!
Ps: não reparem...source tosco de ex prum amigo americano.
Discussão (2)
Carregando comentários...