да-да я понимаю. (я тут читаю SICP... правда на русском и с бумаги.) но все эти метапрограммные костыли C++, они конечно изящны. но все равно сильно много изящных костылей - плохо.
кодом наверное не поделюсь, но там ситуация была, что надо было "обойти/решить" 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 для последующего вызова. ничего лучше
Comments 7
Reply
Reply
Reply
Reply
но все эти метапрограммные костыли C++, они конечно изящны. но все равно сильно много изящных костылей - плохо.
Reply
Короче, делись кодом, позырим ;-)
Reply
и есть две 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 ( ... )
Reply
Leave a comment