c*****z 发帖数: 182 | 1 题目如下
#include
template
struct X
{
enum val {v = T * X::v };
};
template <>
struct X<0>
{
enum val {v = 1 };
};
int main() { std::cout<::v; }
a) Compilation error
b) Link error
c) 120
答案是C,能给解释一下吗 |
r********d 发帖数: 23 | 2 就是阶乘呗
X<5>::v = 5*X<4>::v = 5*4*X<3>::v = ... = 120*X<0>::v = 120
ps. this is a question about template, not about STL.
【在 c*****z 的大作中提到】 : 题目如下 : #include : template : struct X : { : enum val {v = T * X::v }; : }; : template <> : struct X<0> : {
|
e*****w 发帖数: 144 | 3 120
This technique is called TMP.
【在 c*****z 的大作中提到】 : 题目如下 : #include : template : struct X : { : enum val {v = T * X::v }; : }; : template <> : struct X<0> : {
|
b***y 发帖数: 2799 | 4 有点象递归函数。
【在 c*****z 的大作中提到】 : 题目如下 : #include : template : struct X : { : enum val {v = T * X::v }; : }; : template <> : struct X<0> : {
|
y******e 发帖数: 203 | 5 template(boost) meta programming现在没有什么用处吧? |