是否可以在专用模板类中访问非类型模板参数的值?
如果我有专门的模板类:
template <int major,int minor> struct A { void f() { cout << major << endl; } } template <> struct A<4,0> { void f() { cout << ??? << endl; } }
我知道上述情况,硬编码值4和0是简单的,而不是使用变量,但我有一个更大的类,我专长,我想要能够访问的值.
是否可能在A< 4,0>访问主要和次要值(4和0)?或者我必须将它们分配给模板实例化作为常量:
template <> struct A<4,0> { static const int major = 4; static const int minor = 0; ... }
解决方法
这种问题可以通过单独的“Traits”结构体来解决.
// A default Traits class has no information template<class T> struct Traits { }; // A convenient way to get the Traits of the type of a given value without // having to explicitly write out the type template<typename T> Traits<T> GetTraits(const T&) { return Traits<T>(); } template <int major,int minor> struct A { void f() { cout << major << endl; } }; // Specialisation of the traits for any A<int,int> template<int N1,int N2> struct Traits<A<N1,N2> > { enum { major = N1,minor = N2 }; }; template <> struct A<4,0> { void f() { cout << GetTraits(*this).major << endl; } };