Me gustaría crear una interfaz de plantilla para las clases de manejo de datos en mis proyectos.Transfiriendo la firma del método como parámetro de plantilla a una clase
puedo escribir algo como esto:
template <class T>
class DataHandler
{
public:
void Process(const& T) = 0;
};
Entonces, supongamos, que definir una clase de esta manera:
class MyClass: public DataHandler<int>
{
void Process(const int&) { /* Bla-bla */ }
}
Ahora, vamos a la pregunta, ¿hay algún modo de definir la interfaz de mi plantilla en la forma en que como parámetro recibirá no solo el tipo T, sino la firma completa de la función Process().
me gustaría algo de trabajo de esta manera:
class MyClass: public DataHandler<void (int&)>
{
void Process(const int&) { /* Bla-bla */ }
}
¿Es posible? Sé que, por ejemplo, boost :: signal recibe los parámetros de la plantilla de esta manera, pero, si entiendo correctamente, usan mucha magia negra allí.
Ahora la pregunta sigue siendo: ¿cuántos años tardarán hasta que podamos poner las plantillas variadic a uso diario en el trabajo. Saber cuánto más simple podría ser ... –
¿Y cómo debería cambiarlo para admitir más de un parámetro en la función Process() en la interfaz DataProducer? Quiero decir, me gustaría apoyar algo como DataHandler –
Lev
@Lev, sospecho que tendrás que especializar parcialmente 'DataHandler' en el tipo de función para que obtengas la declaración de la función' Process' correcto también 'boost :: function' utiliza el preprocesador para generar el código necesario, pero para proyectos propios y algunos usos, no es útil (en mi opinión) introducirse en ese tema que es probable que ya no necesite. Así que solo copie/pegue 4 veces y termine :) –