【问题标题】:Explicitly specialized members need their containing class templates to be explicitly specialized as well显式特化的成员也需要其包含的类模板也显式特化
【发布时间】:2015-01-12 19:18:55
【问题描述】:

我在很多文章中读到,专门用于类模板 成员模板,包含特化成员模板的类也应显式特化。标准中有没有关于它的观点,是否有任何理由有这样的限制? 我的意思是在引擎盖下。

为什么不允许这样做。

template <typename T>
class A
{
   template <typename U>
   void foo()
   {}
};

template <typename T>
 template <>
void A<T>::foo<int>()
{}

【问题讨论】:

标签: c++ templates member explicit-specialization


【解决方案1】:

[temp.expl.spec]/16:

在类成员的显式特化声明中 模板或出现在命名空间范围内的成员模板, 成员模板和它的一些封闭类模板可能会保留 非特化,除非声明不得明确 如果它的封闭类模板专门化一个类成员模板 也没有明确专门化。 [ 示例:

template <class T1> class A {
    template<class T2> class B {
        template<class T3> void mf1(T3);
        void mf2();
    };
};

template <> template <class X>
class A<int>::B {
    template <class T> void mf1(T);
};

template <> template <> template<class T>
void A<int>::B<double>::mf1(T t) { }
template <class Y> template <>
void A<Y>::B<double>::mf2() { } // ill-formed; B<double> is specialized 
                                // but its enclosing class template A is not

结束示例 ]

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 2015-03-04
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    相关资源
    最近更新 更多