知道声明中的模板参数数量

iam*_*ind 3 c++ templates

如果我有,

template<typename T1, typename T2, int N>
class X {};
Run Code Online (Sandbox Code Playgroud)

有什么办法,我知道class X有3个template参数吗?

用例简述:有两个库类ptr<T>(用于普通指针)和ptr_arr<T,N>(用于指向数组的指针).这两个以下列方式与另一个类进行交互:

template<typename T>
void Clear(const T &obj)
{
  if(T::Args == 1) destroy(obj);
  else destroy_arr(obj);
}
Run Code Online (Sandbox Code Playgroud)

所以,我认为如果我们有一些方便的方法来了解参数的数量,它会让它变得简单.但是,我知道我需要改变我的业务逻辑,因为不可能有这样的方式.

spr*_*aff 6

没有标准的方法来执行此操作(除非您sizeof(Args...)在C++ 0x中使用可变参数),但这不是重点 - 问题是错误的.

使用重载决议.

template <typename T>
void clear (ptr<T> & obj) {
    destroy (obj);
}

template <typename T, int N>
void clear (ptr_arr<T,N> & obj) {
    destroy_arr (obj);
}
Run Code Online (Sandbox Code Playgroud)