来自以下代码
template<int N>
struct fibo{
static const int value = fibo<N-1>::value + fibo<N-2>::value;
};
template<>
struct fibo<1>{
static const int value = 1;
};
template<>
struct fibo<0>{
static const int value = 1;
};
constexpr int count_which_fibo(int which, int max, int n_1, int n_2){
return max<n_1 + n_2 ? which : count_which_fibo(which + 1, max, n_1 + n_2,n_1);
}
template<int first, int... args>
struct container_creator{
typedef typename container_creator<first-1,first, args...>::type type;
};
template<int... args>
struct container_creator<0,args...>{
typedef container_creator<0,args...> type;
static auto create(){
return std::make_tuple(fibo<args>::value...);
}
};
int main(void){
auto var = container_creator<5>::type::create();
}
我收到以下链接错误:
/tmp/ccV91mii.o:在函数container_creator<0, 1, 2, 3, 4, 5>::create()':
fibo.cpp:(.text._ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv[_ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv]+0x12): undefined reference to
fibo&lt; 5&gt; :: value&#39;
fibo.cpp :(。text._ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv [_ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv] + 0x18):对fibo<4>::value'
fibo.cpp:(.text._ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv[_ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv]+0x1d): undefined reference to
fibo&lt; 3&gt; :: value&#39;的未定义引用
fibo.cpp :(。text._ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv [_ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv] + 0x22):对fibo<2>::value'
fibo.cpp:(.text._ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv[_ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv]+0x27): undefined reference to
fibo&lt; 1&gt; :: value&#39;的未定义引用
collect2:错误:ld返回1退出状态
你能告诉我为什么吗?它看起来像静态方法创建是一个问题。