代码之家  ›  专栏  ›  技术社区  ›  getsoubl

模板模板参数:在下面的示例中应用了什么规则[重复]

  •  0
  • getsoubl  · 技术社区  · 7 年前

    假设下面的例子

    using namespace std;
    template <template <typename> class>
    struct X 
    {
       X() 
       { 
          std::cout << "1"; 
       }
    };
    
    template <typename>
    struct Y {};
    
    template <typename T>
    using Z = Y<T>;
    
     template <>
     struct X<Y> 
     {
       X() 
       { 
          std::cout << "2"; 
        }
     };
    
     int main() 
     {
       X<Y> x1;
       X<Z> x2;
     }
    

    表达 X<Y> x1 很明显,使用打印“2”的专门化

    第二个很奇怪。分析 X<Z> X< Y < T > > . 我想打印“1”。但是运行这个代码会打印“2”。第二条规则是什么?

    1 回复  |  直到 7 年前
        1
  •  0
  •   max66    7 年前

    第二个很奇怪。分析 X<Z> 翻译成 X< Y < T > >

    不。

    Z<T> 定义为 Y<T> Y Z 都是一样的。

    X<Z> X<Y<T>> (和 X<Y<T>> 无法匹配,因为 是一种类型 X 仅接受模板参数)。