如果我有,
template<typename T1, typename T2, int N>
class X {};
有什么办法,我知道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);
}
所以,我认为如果我们有一些方便的方法来了解参数的数量,它会让它变得简单。但是,我知道我需要改变我的业务逻辑,因为不可能有这样的方式。
答案 0 :(得分:6)
没有标准的方法来执行此操作(除非您在C ++ 0x中使用可变参数sizeof(Args...)
),但这不是重点 - 问题是错误的。
使用重载解析。
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);
}
答案 1 :(得分:5)
您可以使用mpl::template_arity
(未记录的)
http://www.boost.org/doc/libs/1_40_0/boost/mpl/aux_/template_arity.hpp
答案 2 :(得分:0)
没有办法做到这一点。想象一下过载的数量。
template<int> struct A;
template<bool> struct B;
template<char> struct C;
template<typename> struct D;
template<D<int>*> struct E;
template<D<bool>*> struct F;
template<typename, int> struct G;
// ...
对于每一个,您需要一个不同的模板来接受它们。您甚至无法使用C ++ 0x的可变参数模板,因为模板参数包仅适用于一个参数表单和类型(例如,int...
仅适用于充满整数的参数包)。