Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Если нужно ближе к исходной задаче, то что-то типа:
EP>EP>void f(int a,int b,int c)
EP>{
EP> cout << a << " " << b << " " << c << endl;
EP>}
EP>int main()
EP>{
EP> auto &&d=defaults(f,11,22,33);
EP> d();
EP> d(1);
EP> d(2,3);
EP> d(3,4,5);
EP>}
EP>{
EP> function<void(int,int,int)> general_case{f};
EP> auto &&d=defaults_n<3>(general_case,11,22,33);
EP> d();
EP> d(1);
EP> d(2,3);
EP> d(3,4,5);
EP>}
EP>
Круто! Осталось только поддержать две вещи
— обязательные параметры
— ленивое вычисление необязательных
Это можно сделать, введя два особых типа, и обрабатывая эти типы соответственно.
auto&& d = defaults(f, mandatory, mandatory, ondemand( []()->int { foo()+bar() } )); // первые два обязательные, третий вычисляется каждый раз