c++ / lisp

Sep 29, 2006 18:29

написал трехэтажное bind выражение. подумал, выкинул нах. понял как написать макросом на лиспе, отсюда вывод? :)

laugh, programming

Leave a comment

antoxa October 2 2006, 09:42:03 UTC
кодом наверное не поделюсь, но там ситуация была, что надо было "обойти/решить" forwarding problem, если я правильно все понимаю. т.е. есть набор функций(с разными сигнатурами, но одним return type) и структура, из которой можно выдернуть параметры для вызова любой из таких функций.
и есть две code paths, 1. call just now. 2. defer the call with fetched parameters.
требование: не хочется дублировать код выдергивания параметров для функции.

соотв, у тебя есть набор функций типа таких:

result_type function_a(big_structure const& data)
{
return some_other_function_a(data.param1, data.param2); /* вот этот код надо "обощить" */
}

как в таком варианте дальше либо надо напрямую вызвать соответствующую some_other_function_a
либо сделать на нее bind для последующего вызова.
ничего лучше

template
result_type call_with_continuation(big_structire const& data, ContinuationF const& cont)
{
/* тут не очень большой switch каждый из case которого выбирает параметры и вызывает соответствующую функцию, либо bind, либо напрямую, но приходится решить forwarding problem, либо сразу делать bind и вызывать уже этот cont всегда с одним параметром - функцией, но тогда лишнее копирование :) */
}

Reply


Leave a comment

Up