带有可变参数的C ++模板,用于参数个数

时间:2018-05-26 11:06:25

标签: c++ variadic-templates template-specialization

为接受可变参数模板参数的(类)模板生成特化的最佳方法是什么。

在我的用例中,我有一个接受多个整数的类,我想要一个专门化的情况,只有一个整数作为参数,但整数的值可以是任意的。

例如:

template <int a, int ...b>
class c {
    private:
        c<b...> otherClass;
}

template <int a>
class c {
     // Some base case
}

这可以做到这一点,或者实现这种专业化的最简单方法是什么?

2 个答案:

答案 0 :(得分:0)

类模板特化将模板参数附加到类名称中:

template <int a>
class c<a> {};
       ^^^

答案 1 :(得分:0)

如果我能正确理解你的问题,那么正常的模板专业化就足够了。

#include <iostream>

template <int a, int ...b>
struct c {
    c() { std::cout << "Normal" << std::endl; }
};

template <int a>
struct c<a> {
     c() { std::cout << "Special" << std::endl; }
};

int main() {
    c<1,2> c1;
    c<2> c2;
}