考虑这样的课程
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 ++中制作这样的东西?如果可以,怎么办?
答案 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>;