Если бы вы использовали это исключительно как тип хранения класса, вы могли бы использовать Boost::tuple
, который автоматически генерирует такой ctor, так что ваш класс будет выглядеть примерно так:
tuple<Controller, String, bool> MyFunctor;
Проблема в том, что он не предоставляет никакой возможности включить ваш operator()
. К сожалению, поскольку ctors не наследуются, вы могли бы , а не выполнить что-либо, пытаясь создать functor_base
с использованием boost::tuple
, а затем получить класс, добавивший operator()
.
Очевидной альтернативой будет перезапись tuple
, позволяющая указать код для различных функций-членов. Я не уверен, как это сделать сразу же - это потребует некоторых тщательных размышлений (в лучшем случае).