variadic模板值作为struct的模板参数

时间:2015-07-04 01:32:14

标签: c++ templates variadic

我尝试做这样的事情:

template <int v1, template <typename... Args> Args... vx> struct Sum {
   const static int RESULT = v1 + Sum<vx...>::RESULT;
};

template <int v> struct Sum {
   const static int RESULT = v;
}

要像这样使用:

int a = Sum<1, 2>::RESULT;
int b = Sum<1, 2, 3, 4, 5>::RESULT;

显然,这里出了点问题,我正在努力将变量模板的概念作为结构/类定义中的值。可以这样做吗?怎么样?

...谢谢

1 个答案:

答案 0 :(得分:0)

其中一个问题是,两个模板声明都没有专门化其他这些声明中的代码不同,所以代码格式不正确。

此外,您实际上并未在此处使用模板作为模板参数,代码不需要它,您可以在此处看到:

// main template
template <int v1, int... vx> struct Sum {
    const static int RESULT = v1 + Sum<vx...>::RESULT;
};

// specialization to make recursion terminate
// the list of matched template parameters is listed
// after the name of the struct in angle brackets
template <int v> struct Sum<v> {
    const static int RESULT = v;
};

static_assert(Sum<1, 2, 3, 4, 5>::RESULT == 15, "");

int main() {}