Lo que podrías hacer es "definir" un servicio y proveer de varias implementaciones, como la que ya tienes hecha o bien utilizando boost. Si lo haces bien, es posible que puedas utilizar la implementación con boost si el usuario tiene instalado boost o la que tienes implementada ahora en caso de que no la tenga. En cualquier caso mantienes tu implementación tal cual está.
Para ello lo que tienes que hacer es definir una interfaz. Si mal no recuerdo C++ no define interfaces, pero con una clase abstracta es suficiente. En la clase abstracta defines los métodos que van a estar accesibles en todas la implementaciones. Los métodos
deben ser abstractos para obligar a que se implementen.
La implementación que ya tienes hecha puede que necesites adaptarla para que herede de dicha clase abstracta.
Luego, lo que tienes que hacer es implementar esa clase abstracta utilizando boost.
Para que te hagas una idea te lo hago en java y luego lo puedes adaptar a c++
Código:
public abstract class Servicio{
//debería ser una interfaz, pero una clase abstracta también sirve
public abstract void doSth();
public abstract String getSth();
public abstract String toUpperCase(String s);
}
public class ServicioDefecto extends Servicio{
//es posible que necesitaran la anotación @Override, pero C++ no utiliza anotaciones (creo)
public void doSth(){} //implementar método
public String getSth(){}
public String toUpperCase(String s){}
}
public class ServicioBoost extends Servicio{
public void doSth(){} //distinta implementación
public String getSth(){}
public String toUpperCase(String s){}
}
Para utilizarlo correctamente, lo único que tienes que hacer es usar la interfaz/"clase abstracta"
Código:
public void main(String[] args){
Servicio servicio;
if (tiene_boost y quiere_boost){
servicio = new ServicioBoost();
} else {
servicio = new ServicioDefecto();
}
...
String message = servicio.getSth();
servicio.doSth();
}
De esta forma, apenas tienes que tocar el código que tienes actualmente y puedes cambiar de implementación incluso en tiempo de ejecución. Si resulta que la implementación con boost sale muy rentable, la pones para que sea la implementación por defecto. En caso de error, porque no detectas la librería, porque el usuario no quiere utilizar esa implementación, o cualquier otra cosa, puedes cambiar a la que tienes por defecto.
Citar:
Boost es tan bueno como dicen como para dedicar mi tiempo a aprender a utilizar su API y las templates de C++ para usarlas en mi proyecto?
Hombre, pues teniendo el tiempo que llevan escritas y habiéndose utilizado en no pocos proyectos, malo no creo que sea. Yo apostaría por la aproximación que te he puesto, al menos así siempre puedes tener algo funcionando.