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

标签 c++ templates c++11 traits

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

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>
{};

关于c++ - 将模板专门化为嵌套类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18064656/

相关文章:

c++ - 类析构函数上的调试断言失败

c++ - 设置主机和执行功能有什么区别?

c++ - gmock - 测试模拟方法参数

c++ - std::vector 的删除函数

c++ - 如何从 `decltype(<funtion>)` 获取函数参数的数量?

c++ - 层次结构中的反向可变参数模板参数

c++ - 无法创建 constexpr std::vector

c++ - 模板:在运行时从非类型化参数实例化(并引用)?

c++ - 模板和常量类型?

c++ - C++11 中的 lambda 表达式是什么?