所以,假设我有一个模板 structure-function fib<i>::value
。我想在运行时获得第 n 个斐波那契数。为此,我创建了数组fibs[] = { fib<0>::value, ... , fib<maxN>::value }
。不幸的是,对于某些功能maxN
可能非常大,我不能只用手填充它。所以我写了一些预处理指令来简化任务。
#define fib(x) (fib<(x)>::value)
#define fibLine_level_0(x) fib(5*(x) + 0), fib(5*(x) + 1), fib(5*(x) + 2), fib(5*(x) + 3), fib(5*(x) + 4)
#define fibLine_level_1(x) fibLine_level_0(2*(x) + 0), fibLine_level_0(2*(x) + 1)
#define fibLine_level_2(x) fibLine_level_1(2*(x) + 0), fibLine_level_1(2*(x) + 1)
#define fibLine_level_3(x) fibLine_level_2(2*(x) + 0), fibLine_level_2(2*(x) + 1)
#define cAarrSize(x) (sizeof(x) / sizeof(x[0]))
我这样使用它:
int fibs[] = { fibLine_level_3(0) };
for (int i = 0; i < cAarrSize(fibs); i++)
cout << "fib(" << i << ") = " << fibs[i] << endl;
您可能需要的代码:
template<int i>
struct fibPair{
static const int fst = fibPair<i-1>::snd;
static const int snd = fibPair<i-1>::fst + fibPair<i-1>::snd;
};
template<>
struct fibPair<0> {
static const int fst = 0;
static const int snd = 1;
};
template<int i>
struct fib {
static const int value = fibPair<i>::fst;
};
但是这段代码真的很丑。怎么做才能让它更漂亮?
约束:此代码必须在体育节目中使用。这意味着 - 没有第三方库,有时也没有 C++11(但它可以)