[бредятинка] wishful programming
От: Кодт Россия  
Дата: 28.07.15 15:31
Оценка:
Сейчас налетел на очепятку вот такого рода
// дано
class Contents;
struct Size;

class Image;
class Icon {
  .....
  Image AsImage() const;
  .....
};

class Controller {
  .....
  Icon GetIcon(Contents, Size) const;
  .....
};

// хотел
Image image = controller.GetIcon(contents, size).AsImage();
// написал
Image image = controller.GetIcon(contents, size.AsImage());


И подумалось: а БЫЛО БЫ КРУТО просовывать пожелания ("AsImage" — это пожелание) изнутри наружу.
На перегрузках и шаблонах это делается несложно, хотя и многословно, если нет соответствующего фреймворка или поддержки языка
class Controller {
  .....
  template<class Wish>
  auto GetIcon(Contents contents, Size size, Wish wish) -> auto {
    return apply_wish(GetIcon(contents, size), wish);
  }
  .....
};

Image image = controller.GetIcon(contents, size, AsImage);

Следующим шагом будет свёртка пожеланий с аргументами (что у меня и произошло в опечатке) — и дальнейший вывод пожелания из типа аргумента.
class Controller {
  .....
  template<class Size_Wish>
  auto GetIcon(Contents contents, Size_Wish size) -> auto {
    return apply_wish(GetIcon(contents, get_pure(size)), get_wish(size));
  }
  .....
};

Image image = controller.GetIcon(contents, make_wish(size, AsImage));

Ну и наконец, легитимизация синтаксиса: make_wish(x,y) == x.y

Дело запахло аппликативными функторами...
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.