【发布时间】:2015-10-09 04:33:14
【问题描述】:
我需要在编译时生成引用表,这样我就可以节省一些运行时计算,比如我有如下用例
static unsigned long long int table[21]={0,1,1};
template<long long N>
struct fib
{
static long long value()
{
fib<N-1>::value();
table[N] = table[N-1] + table[N-2];
}
};
template<>
struct fib<0>
{
static long long value()
{
return table[0];
}
};
template<>
struct fib<1>
{
static long long value()
{
return table[1];
}
};
template<>
struct fib<2>
{
static long long value()
{
return table[2];
}
};
#include<iostream>
using namespace std;
int main()
{
fib<20>::value(); // <<---- WARNING!
for(int i=0 ;i <21 ; ++i)
cout<<" "<<i<<":" << table[i];
cout<<endl;
return 0;
}
导致警告
fibs.cpp:在静态成员函数“static long long int fib::value()”中: fibs.cpp:12:3:警告:函数中没有返回语句返回非 void [-Wreturn-type]
这是正确的。
我的问题是,为什么没有其他人使用这种方式,缺点?还有什么其他可能的方法? 资源会很有帮助!
【问题讨论】: