专门只嵌套模板
问题描述:
我具有以下的模板:专门只嵌套模板
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> {
};
};