我尝试做这样的事情:
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;
显然,这里出了点问题,我正在努力将变量模板的概念作为结构/类定义中的值。可以这样做吗?怎么样?
...谢谢
答案 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() {}