В принципе, то, что я хочу достичь, это проверка времени компиляции (возможно, с хорошим сообщением об ошибке), который зарегистрировал вызываемый (либо функция, либо лямбда, либо структура с оператором вызова) имеет правильную подпись. Пример (содержимое static_assert
должно быть заполнено):
struct A {
using Signature = void(int, double);
template <typename Callable>
void Register(Callable &&callable) {
static_assert(/* ... */);
callback = callable;
}
std::function<Signature> callback;
};