c++ - 什么时候我们需要提供模板参数来定义一个类?

标签 c++

template<typename T> class A // template parameterization
{
   private:
      T t;
   A(const T& v) : t(v) {}
};

class B
{
    template<typename T>
    B(const T& v)
    {
        std::cout << v << std::endl;
    }
};

// usage of A and B
A<int> a;
B      b(10);

问题> 在什么情况下,我们必须提供模板参数才能定义类变量。

例如,

如果类包含模板成员变量或???

谢谢

最佳答案

如果类是类模板,则必须提供模板参数才能创建实例。在您的示例中,class A 是类模板,而 class B 不是。

类模板:

template <typename T> class A {};

不是类模板:

class B { 
  // code may include function template, etc.
  // but the class itself is not a class template
};

在您的示例中,class B 有一个模板构造函数,编译器可以使用该参数来确定进行哪个特化。所以在这种情况下,它生成一个等价于

的构造函数
B(const int&);

因为文字 10 是一个 int。构造器不像函数,所以这只有在编译器可以弄清楚 T 是什么的情况下才能工作。参见 this related question了解更多详情。

关于c++ - 什么时候我们需要提供模板参数来定义一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10837259/

相关文章:

c++ - 我怎样才能让 gcc 警告我 "int i = i;"

c++:检查对象数组中类的对象

c++ - 转换回早期类型

c++ - OpenGL坐标问题

c++ - GCC 用于 STL 的默认分配器是什么?

c++ - 分配给派生类的基类指针和多态性

c++ - 使用范围解析运算符传递函数指针arduino

c++ - "Clang with Microsoft CodeGen"和 "LLVM-vs2014"有什么区别?

C++:数字排列程序无法正常工作

c++ - WinDbg 扩展步进