繁体   English   中英

模板化类中的C ++参数化构造函数

[英]C++ parameterized constructor In a templated class

我最近开始学习C ++中的模板,但不确定我是否需要为参数化构造函数的实现包括template <class T>

  template <class T>
  class A
  {    T num;

    //default constructor (parameterized)

    template <class T>//getting error
    A(T value)
    { num=value;}
  } 

当我为构造函数包含template<class T> <class T>时,我得到一个错误的影子模板parm <class T>,但是当我注释掉它时它可以工作。

我想知道为什么我不需要为构造函数声明模板。

如果确定需要模板化的构造函数,则为模板使用其他参数名称:

template <class T>
  class A
  {   
    T num;

    //default constructor (parameterized)

    template <class U>
                 // ^
    A(U value)
   // ^
    { num=value;}
  };

否则,用于模板化构造函数的模板参数名称T将覆盖类模板声明中使用的名称。


正如您在评论中问到的: “什么时候使用模板化构造函数?”

适用于类似

A<double> a(0.1f);

注意,上面只是一个简单的示例,不需要模板化的构造函数。 只是为了说明模板化构造函数用于从与实例化中使用的类型不同的类型进行转换。


“我想知道为什么我不需要为构造函数声明模板。”

没有(或带有附加)非模板构造函数的模板类将简单地使用指定为类类型参数的T作为参数类型

template <class T>
  class A
  {   
    T num;

    A(T value)
   // ^
    { num=value;}
  };

这是标准情况,大多数模板类不需要模板构造函数或其他模板函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM