是否有专门针对嵌套类的特征模板?我已经在下面提到的三个地方尝试了它,每个地方都有给定的错误。我已经看到有关专门化嵌套模板类的问题,但这不是我在这里要做的 - 我正在尝试专门化嵌套类使用的特征类。
TraitUser类使用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>
//{};
看起来问题的根源是无法转发声明嵌套类,也无法在类声明中定义特化。
我正在使用C ++ 11在clang下尝试这个。
答案 0 :(得分:3)
这里有一些复杂的声明排序:
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>
{};