кодом наверное не поделюсь, но там ситуация была, что надо было "обойти/решить" 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 всегда с одним параметром - функцией, но тогда лишнее копирование :) */ }
и есть две 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