Чтобы добавлять сообщения и комментарии, .

@Crazy-Owl:
Crazy-Owl

Ковыряюсь в кишках mako. Кстати, Mako — вездеход из игры^W дейт-сима Mass Effect.

@folex:
folex

code.google.com

@zeks:
zeks

Лол, кажется я всё это время писал policy classes даже об этом не догадываясь

@sany:
sany

Вычисление квадратного корня в рациональных числах на этапе компиляции.
Пример:
Создаём рациональное число 20:
typedef rational<20,1> a; // 20 - делимое, 1 - делитель
std::cout << sqrt<a>::type::get() << std::endl;

Для работы с рациональными числами нужно создать дополнительную структуру и описать математические операции для неё.
Для корня используется алгоритм Ньютона (см. struct sqrt_eval)

#include <stdint.h>
template <int64_t A, int64_t B>
struct rational
{
  const static int64_t a = A, b = B;
  static double get() { return (double)a/b; };
};

template <class R>
struct reduce
{
  const static int64_t max = 1<<30;
  const static bool do_reduce = (R::a > max) || (R::b > max);
  typedef rational<do_reduce?(R::a >> 15):R::a, do_reduce?(R::b >> 15):R::b> type;
};

template <class R1, class R2>
struct plus
{
  typedef rational<R1::a * R2::b + R2::a * R1::b, R1::b * R2::b> type1;
  typedef typename reduce<type1>::type type;
};

template <class R1, class R2>
struct minus
{
  typedef rational<R1::a * R2::b - R2::a * R1::b, R1::b * R2::b> type1;
  typedef typename reduce<type1>::type type;
};

template <class R1, class R2>
struct mult
{
  typedef rational<R1::a * R2::a, R1::b * R2::b> type1;
  typedef typename reduce<type1>::type type;
};

template <class R1, class R2>
struct divide
{
  typedef rational<R1::a * R2::b, R1::b * R2::a> type1;
  typedef typename reduce<type1>::type type;
};

template <class R1, class R2>
struct rational_less
{
  static const bool value = (R1::a * R2::b - R2::a * R1::b) < 0;
};

template <bool, class A1, class A2>
struct meta_if
{
  typedef A2 type;
};

template <class A1, class A2>
struct meta_if<true, A1, A2>
{
  typedef A1 type;
};

template <int64_t p, class res, class x>
struct sqrt_eval
{
  typedef typename divide<x, res>::type t1;
  typedef typename plus<res, t1>::type t2;
  typedef typename divide<t2, rational<2,1> >::type tmp;
  typedef typename meta_if<rational_less<tmp, res>::value, tmp, res>::type less_val;
  typedef typename sqrt_eval<p-1, less_val, x>::type type;
};

template <class res, class x>
struct sqrt_eval<0, res, x>
{
  typedef res type;
};

template <class x>
struct sqrt
{
  typedef typename divide< typename plus<x, rational<1,1> >::type, rational<2,1> >::type res;
  typedef typename sqrt_eval<15, res, x>::type type;
};

template <int64_t a>
struct sqrt< rational<0, a> >
{
  static const int64_t value = 0;
};

@sany:
sany

Вычисление квадратного корня в целых числах на этапе компиляции
пример assert(sqrt<81>::value == 9);

template <bool>
struct while_f
{
  template <int res, int x>
  struct calc_res
  {
    const static int tmp = (res+x/res)/2;
    typedef typename while_f<(res > tmp)>::template calc_res<(tmp<res)?tmp:res, x> a;
    static const int value = a::value;
  };
};

template <>
struct while_f<false>
{
  template <int res, int x>
  struct calc_res
  {
    static const int value = res;
  };
};

template <int x>
struct sqrt
{
  static const int value = while_f<true>::calc_res<(x+1)/2, x>::value;
};

template <>
struct sqrt<0>
{
  static const int value = 0;
};

@hatred:
hatred

На правах мемориза: cplusplus.com
и да:
From the point of view of the compiler, templates are not normal functions or classes. They are compiled on demand, meaning that the code of a template function is not compiled until an instantiation with specific template arguments is required. At that moment, when an instantiation is required, the compiler generates a function specifically for those arguments from the template.

@DZhon:
DZhon

rghost.ru
Вот за такие подсказки на весь экран начинаешь тихонько недавидеть и эклипс, и шаблоны, и все многословие плюсов.

@idler-max:
idler-max

Выщел Smarty3 .... Прежде чем попробовать его, предлагаю ковырнуть {{MACRO}} ( limb-project.com )

@alsmirn:
alsmirn

В пай деве 1.62 появился редактор джанго-шаблонов: pydev.blogspot.com . Ура!? (На новость навел @lig)

@kaineer:
kaineer

внезапно добрался до объекта forloop. Забавно.