Само определение блока - это общая сумма "сообщений", которые блок может получить в терминах параметров вызова / ABI.
Это по нескольким причинам:
Во-первых, блок не является функцией, а указатель блока не является указателем функции.Их нельзя использовать взаимозаменяемо.
Во-вторых, C ABI таков, что у вас есть , чтобы объявление функции вызывалось при компиляции сайта вызова, если параметры должны бытьзакодировано правильно.
Альтернативой является использование чего-то вроде NSInvocation, который позволяет индивидуально кодировать аргументы, но даже для этого требуется полное знание C ABI для каждого отдельного аргумента.
В конечном счете, если вы можете скомпилироватьсайт вызова, который имеет все параметры, будь то метод Objective-C или вызов функции, с точностью, необходимой для того, чтобы компилятор был доволен, вы можете преобразовать этот сайт вызова в вызов блока.
То есть, если вы немного не проясните свой вопрос, то, что вы просите, либо уже поддерживается, либо почти невозможно из-за капризов C ABI.