Вы можете использовать Controlled
функтор для создания контролируемой версии любой операции, которая допускает это (включая примитивные ворота) следующим образом:
Controlled H([controls], target);
Вы можете посмотреть детали использования Controlled
функтор в документации .