将模板专门化为嵌套类类型
Specialization of a template to a nested class type
是否有专门化嵌套类的特征模板的方法?我已经在下面提到的三个地方尝试过了,每个地方都有给定的错误。我看到了一些关于专门化嵌套模板类的问题,但这不是我在这里要做的——我试图专门化嵌套类使用的特征类。
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>
{};
相关文章:
- CRTP:为什么获得嵌套类型和派生类的嵌套方法有区别
- 为什么在VS2015中模板相关的嵌套类型名称中不需要typename关键字?
- 为什么嵌套类型的基类不需要"typename"?
- 如何在C++中的另一个模板函数中使用属于模板化类的嵌套类型?
- 保持嵌套类型的挥发性
- 具有嵌套类型的类的概念
- 将嵌套类型的类分开为标题和源
- 如何解决C++嵌套类型的循环依赖关系
- 在 C++11 中,从私有嵌套类型继承是否合法?
- C++ 递归嵌套类型和名称注入
- 如何定义一个模板类函数,该函数在类外的签名中具有嵌套类型的模板参数
- 访问模板参数T的嵌套类型,即使T是指针
- 为什么reverse_iterator双重定义其嵌套类型
- 嵌套类型:结构与类
- 如何对嵌套类型执行部分模板专用化
- 如何解析可选的嵌套类型,如 std::allocator_traits
- 模板和嵌套类型查找
- 在 c++ 中显示嵌套类型定义的最基本类型声明
- 无法推断出嵌套类型的模板函数
- C++使用别名访问嵌套类型(使用 vs typedef)