Я пытался придумать (просто как эксперимент, ничего серьезного) с макросом, который оборачивает ALLOCA более объектно-ориентированным способом, используя специальный «конструктор», который возвращает размер, который понадобится экземпляру, вместе с указателем на функцию, которая должна его инициализировать.
Писать, что использование большего количества утверждений просто:
void (*initf)(Type *inst);
Type *obj = alloca(Type::init(&initf, ...));
initf(obj);
Очевидно, что оборачивая это в функцию будет работать, если это было что-то еще, чем ALLOCA, но это должно быть встроено.
Можно ли сделать выражение, которое выполняет такую задачу, возвращая obj
как его результат? Проект не должен оставаться прежним, но обычно должна быть функция, принимающая аргументы, которые должен принимать конструктор, и производящая функцию size и initializer. Если ALLOCA взял в качестве параметра std::pair<size_t,void(*)(void *ptr)>
все было бы намного проще.
Я подозреваю, что это не может быть достижимо в C ++, но просто для любопытства, это может быть сделано в C? Кажется, в последнее время было добавлено много функций, предназначенных для макросов.
Задача ещё не решена.
Других решений пока нет …