Padrão de design C ++ para passar um grande número de parâmetros
Tenho uma classe de tamanho razoável que implementa vários algoritmos relacionados à lógica (da teoria dos grafos). Cerca de 10 a 15 parâmetros são necessários como entrada para o algoritmo. Eles não são modificados pelo algoritmo, mas são usados para orientar a operação dele. Primeiro, explico duas opções para implementar isso. Minha pergunta é: qual é uma maneira comum de fazer isso (se é ou não uma das duas opções
Pessoalmente, não gosto de passar esses valores como parâmetros para a função quandoN
é grande, especialmente enquanto ainda estou desenvolvendo o algoritm
void runAlgorithm(int param1, double param2, ..., bool paramN);
Em vez disso, tenho uma classeAlgorithm
que contém os algoritmos e eu tenho uma estruturaAlgorithmGlobals
que contém esses parâmetros. Eu passo essa estrutura para:
void runAlgorithm(AlgorithmGlobals const & globals);
Ou adiciono uma instância pública AlgorithmGlobals à classe:
class Algorithm {
public:
AlgorithmGlobals globals;
void runAlgorithm();
}
Então em outro lugar eu usaria assim:
int main() {
Algorithm algorithm;
algorithm.globals.param1 = 5;
algorithm.globals.param2 = 7.3;
...
algorithm.globals.paramN = 5;
algorithm.runAlgorithm();
return 0;
}
Observe que o construtor deAlgorithmGlobals
define bons padrões para cada um dos parâmetros, portanto, apenas os parâmetros com valores não padrão precisam ser especificado
AlgorithmGlobals
não são tornados privados, porque podem ser modificados livremente antes dorunAlgorithm()
função @ é chamada. Não há necessidade de "protegê-los".