Я хотел бы создать шаблонный интерфейс для классов обработки данных в моих проектах.
Я могу написать что-то вроде этого:
template <class T>
class DataHandler
{
public:
void Process(const& T) = 0;
};
Тогда, предположим, я определяю класс следующим образом:
class MyClass: public DataHandler<int>
{
void Process(const int&) { /* Bla-bla */ }
}
Теперь встает вопрос, могу ли я как-то определить интерфейс моего шаблона таким образом, чтобы в качестве параметра он получал не просто тип T, а всю сигнатуру функции Process ().
Я бы хотел, чтобы что-то работало так:
class MyClass: public DataHandler<void (int&)>
{
void Process(const int&) { /* Bla-bla */ }
}
Возможно ли это? Я знаю, что, например, boost :: signal получает параметры шаблона таким образом, но, если я правильно понимаю, они используют там много черной магии.