Tengo una pregunta sobre "buenas prácticas de diseño" en C++. Estoy escribiendo una biblioteca numérica en C++ 11 y uso una gran cantidad de metaprogramación y técnica basada en plantillas. Pero tengo una pregunta muy básica:Diseño C++: funciones con opciones booleanas
Considere una función que puede tener dos comportamientos muy cercanos a excepción de una opción que se puede activar mediante un indicador booleano. Considero solo una bandera que puede ser configurada/no configurada por el desarrollador y no una bandera que se puede establecer/desactivar en el tiempo de ejecución. Hay 3 posibilidades de diseño:
1) escribir dos funciones con la opción explícita en su nombre:
myFunctionFlag1(...);
myFunctionFlag2(...);
2) utilizar un parámetro de plantilla:
template<bool Flag> myFunction(...);
3) Use un parámetro variable:
myFunction(..., const bool flag);
En términos de buenas prácticas de diseño, ¿qué solución es aceptable/inaceptable? Si hay una mejor solución, ¿cuál es y por qué? Si hay una peor solución, ¿cuál es y por qué?
EDITAR: para las funciones consideradas, la sobrecarga de tiempo de ejecución podría considerarse insignificante, por lo que este no es el punto más crítico.
EDIT 2: Sé que los tres funcionan. Pero como mi biblioteca tendrá usuarios, debe tener un diseño confiable/bueno.
¿Es la opción 2 común (porque me parece que es un buen compromiso)?
http://codereview.stackexchange.com –
Recomiendo este artículo: http://www.drdobbs.com/conversationstruth-or-consequences/184403845 –