【发布时间】:2014-05-22 06:27:39
【问题描述】:
我有元函数 FibIter。它计算斐波那契数列中对应于数字(参数 Iter)的斐波那契数。然后我使用 mpl::transform 创建 mpl::vector 斐波那契序列从 0 到 N。我已经编写了代码:
template <typename F1, typename F2, typename Iter>
struct FibIter :
mpl::if_
<
mpl::equal_to <Iter, mpl::int_ <0> >,
F1,
FibIter <F2, mpl::plus<F1, F2>, mpl::minus <Iter, mpl::int_ <1> > >
>::type
{ };
const int N = 22;
typedef mpl::range_c <int, 0, 22> Numbers;
typedef
mpl::transform
<
Numbers,
FibIter <mpl::int_ <0>, mpl::int_ <1>, mpl::_ >,
mpl::back_inserter
<
mpl::vector <>
>
>::type
FibSeq;
但是,这并不好。因为 FibSeq 中的每个数字都从 0 开始一次又一次地计算。 我想在 FibIter 定义中递归地在 FibIter 和 push_back 数字之前创建 mpl::vector 。 我该怎么做?请帮忙。
【问题讨论】:
-
这是您真正想要的方式吗?
mpl::transform一般用于t -> f(t)变换,不适合递归序列
标签: c++ templates metaprogramming