C++ 将模板专门化为嵌套类类型
是否有专门化嵌套类的特征模板?我在下面提到的三个地方试过,每个地方都有给定的错误。我看到过关于专门化嵌套模板类的问题,但这不是我在这里要做的——我试图专门化嵌套类所使用的trait类 TraitUser类将Trait中的定义用作特定类型T的专用定义。也许最相关的是,它使用Trait成员初始化基类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>
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模板有需要在外部定义的静态成员,编译器对引用私有嵌套类感到恼火。