将模板专门化为嵌套类类型

Specialization of a template to a nested class type

本文关键字:嵌套 类型 专门化      更新时间:2023-10-16

是否有专门化嵌套类的特征模板的方法?我已经在下面提到的三个地方尝试过了,每个地方都有给定的错误。我看到了一些关于专门化嵌套模板类的问题,但这不是我在这里要做的——我试图专门化嵌套类使用的特征类。

TraitUser类将Trait中的定义用作特定类型T的专用定义。也许最相关的是,它使用一个Trait成员来初始化基类。

template<T>
class TraitUser:public X<typename Trait<T>::Type>
{
  //Trait<T> gets used in here
};
//class A;
//class A::B;   <-incomplete type used in nested name
//template<>
//struct Trait<A::B>
//{};
class A
{
private:
    //class B;
    //template<>         <-explicit specialization at class scope
    //struct Trait<B>
    //{};
    class B:TraitUser<B>
        {};
};

//template<>        <- specialization after instantiation
//struct Trait<A::B>
//{};

问题的根源似乎是不能正向声明嵌套类,也不能在类声明中定义专门化。

我正在使用C++11在clang下尝试这个。

这里有一些复杂的声明排序:

template <class T>
struct Trait;
template <class T>
struct X
{};
template<class T>
class TraitUser:public X<typename Trait<T>::Type>
{
  //Trait<T> gets used in here
};
class A
{
private:
    class B;
};

template<>
struct Trait<A::B>
{
    typedef int Type;
};
class A::B : public TraitUser<B>
{};