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

C++ 将模板专门化为嵌套类类型,c++,templates,c++11,traits,C++,Templates,C++11,Traits,是否有专门化嵌套类的特征模板?我在下面提到的三个地方试过,每个地方都有给定的错误。我看到过关于专门化嵌套模板类的问题,但这不是我在这里要做的——我试图专门化嵌套类所使用的trait类 TraitUser类将Trait中的定义用作特定类型T的专用定义。也许最相关的是,它使用Trait成员初始化基类 template<T> class TraitUser:public X<typename Trait<T>::Type> { //Trait<T>

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

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>
//{};
模板
类叛徒:公共X
{
//特质在这里被使用
};
//甲级;

//A类:B类 这里有一些复杂的声明顺序:

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>
{};
模板
结构特征;
模板
结构X
{};
模板
类叛徒:公共X
{
//特质在这里被使用
};
甲级
{
私人:
乙级;;
};
模板
结构特征
{
typedef int类型;
};
A类:B类:公开叛徒
{};

对不起,我听不懂你的问题。在哪里使用
Trait
,它与
TraitUser
有什么关系,
TraitUser
是模板还是非模板,
a
是非模板?@MarkB,对不起,我试图把一些复杂的相互关联的代码简化成一些简单的东西,似乎做得太多了。。。Trait包含一些TraitUser使用的相对类型别名和函数指针。TraitUser是一个模板类。A和B本身不是模板,而是从模板继承的。TraitUser调用Trait专门化来了解要调用的函数和要使用的类型,它还使用一个Trait类型来参数化它自己的一个模板基类,正如我现在在问题中所展示的那样……对不起,你说得对,我在问题中过度简化了。我试图更新它。。。TraitUser还使用Trait::Type作为模板基类的参数,这是一个额外的纠结。。。我想这就是触发“实例化后专门化”错误的原因——它在B.@GB声明中被实例化了。这更具挑战性。@GB如果你告诉我在
a
的定义中
B
需要完整,我会哭的。@Casey——就是这样!我做了一个小编辑,使TraitUser成为a的朋友。这在骨架代码中并不清楚,但Trait模板有需要在外部定义的静态成员,编译器对引用私有嵌套类感到恼火。