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

C++ parameterized constructor In a templated class

本文关键字:c++ 参数 构造函数      更新时间:2023-10-16

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

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

我得到一个错误的阴影模板parm <类T>,当我为构造函数包含template<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;}
  };

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