c – 是否可以在专用模板类中访问非类型模板参数的值?

前端之家收集整理的这篇文章主要介绍了c – 是否可以在专用模板类中访问非类型模板参数的值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以在专用模板类中访问非类型模板参数的值?

如果我有专门的模板类:

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; 
    }   
};

猜你在找的C&C++相关文章