代码之家  ›  专栏  ›  技术社区  ›  Krystian S

定义类模板构造函数并提供模板参数

c++
  •  2
  • Krystian S  · 技术社区  · 6 年前

    C++不关心我是否提供了带有模板参数的类模板的构造函数。下面是一个例子:

    template<typename T>
    class Foo
    {
      Foo() { /* ... */ } // OK
      Foo<T> { /* ... */ } // Also OK
    }
    

    这两个构造函数定义之间有区别吗?另外,在提供模板参数的主题上,当声明在同一个类中时,为什么不必须向类模板参数提供参数呢?下面的例子:

    template<typename T>
    class Foo
    {
      Foo(const Foo& other) { /* ... */ } // OK
      Foo(const Foo<T>& other) { /* ... */ } // Also OK
      void Foobar(const Foo& foo) { /* ... */ } // Still OK
    };
    
    // Somewhere outside Foo...
    void Foobar(const Foo& foo) { /* ... */ } // Not OK
    

    这与它是当前实例化的一部分有关吗?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Brian Bi    6 年前

    每个班都有一个 注入的类名 ,它是引用类本身的成员typedef。对于非模板类 Foo ,注入的类名也是 FOO公司 . 为了 Foo<T> (类模板的专门化 )注入的类名为 FOO公司 (也就是说,没有模板参数)。因此,在课堂上 FO & T; 名字 foo<t> 两者都可用于引用类 FO & T; 本身。