模板可以确定C ++中的参数数量吗?

时间:2019-01-06 07:54:14

标签: c++ templates

考虑这样的课程

template<int n, class T>
class dimArray {
    T* arr;
    int len[n];
public:
    dimArray(int len₀, int len₁, int len₂, ..., int lenₕ₋₁, T initValue);
    T& at(int x₀, int x₁, int x₂, ..., int xₕ₋₁);
    void foo(int x₀, int x₁, int x₂, ..., int xₕ₋₁, .../*va_args*/);
}

使用

dimArray<2, double> a(3,4, 1.0);
a.at(1,2) = 4.3;
std::cout << a.at(2,3);
a.foo(1,2, 7.3,4.2,0);

len₀等是p代码。是否可以在C ++中制作这样的东西?如果可以,怎么办?

1 个答案:

答案 0 :(得分:1)

您可以使用可变参数模板和std::index_sequence实用程序来做到这一点:

template <std::size_t I, typename T>
using always_t = T;

template<typename Seq, class T>
class dimArrayImpl;

template<std::size_t ... Is, class T>
class dimArrayImpl<std::index_sequence<Is...>, T>
{
    T* arr;
    int len[sizeof...(Is)];
public:
    dimArrayImpl(always_t<Is, int>... lens, T initValue);
    T& at(always_t<Is, int>... lens);
    void foo(always_t<Is, int>... lens, .../*va_args*/);
};

template<int n, class T>
using dimArray = dimArrayImpl<std::make_indexsequence<n>, T>;