专门只嵌套模板

问题描述:

我具有以下的模板:专门只嵌套模板

template<typename FirstParam> 
struct First 
{ 
    template<typename SecondParam> 
    struct Second; 
}; 

例专业化:

template<typename T> class D {}; 

template<> 
template<> 
struct First<C1>::Second<C1::C2> 
{ 
    typedef D<C1::C2> type; 
}; 

这是当这两个类被专门在同一时间的情况。但是有没有可能只专攻二班?

是这样的:

template<typename OuterParam> 
template<> 
struct Outer<OuterParam>::Inner<typename OuterParam::C2> 
{ 
    typedef E<typename OuterParam::C2> type; 
}; 

(是的,我还需要第二PARAM是内部类的第一个。)

号§14.7.3[temp.expl.spec]/P16 ,加上强调:

在一个明确的专业化声明一个类 模板的成员或出现在命名空间内的成员模板时, 成员模板和一些连接的关闭类模板可以保持 非特,只是如果它包含的类模板 没有明确的专业以及声明将不会明确 专业类成员模板。

您可以使用 “部分” 专业化,而不是std::is_same

template<typename FirstParam> 
struct First 
{ 
    template<typename SecondParam, bool = std::is_same<typename FirstParam::C2, 
                 SecondParam>::value> 
    struct Second; 

    template<class T> 
    struct Second<T, true> { 
    }; 
};