C++模板实例化

标签 c++ templates

我有一个如下所示的模板类。

template<int S> class A
{
private:
  char string[S];

public:
  A()
  {
    for(int i =0; i<S; i++)
    {
      .
      .
    }
  }

  int MaxLength()
  {
    return S;
  }
};

如果我用不同的 S 值实例化上述类,编译器会创建 A() 和 MaxLenth() 函数的不同实例吗?或者它会创建一个实例并将 S 作为某种参数传递吗?

如果我将 A 和 Maxlength 的定义移动到不同的 cpp 文件,它将如何表现。

最佳答案

模板将针对每个不同的 S 值进行实例化。

如果将方法实现移动到不同的文件,则需要 #include 该文件。 (例如,Boost 对需要#included 的此类源文件使用 .ipp 约定)。

如果您想最大程度地减少模板实例化生成的代码量(因此需要在 .ipp 文件中提供),您应该尝试通过删除对 S 的依赖。因此,例如,您可以派生自一个(私有(private))基类,该基类提供以 S 作为参数的成员函数。

关于C++模板实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/348763/

相关文章:

c++ - 在派生类中声明的虚函数

C++ 文件处理:ios::ate 无法正常工作

python - Jinja2 将整个元素放入 <option>

C++ 模板和 "no matching function to call"

c++ - 用户定义的重载运算符 * 与 std::chrono::duration

c++ - 如何在模板中返回正确的数据类型?

c++ - 根据自定义 Iterator<T> 将返回值定义为 * 或 &

c++ - 如何知道该包包含哪些功能?

C++ 传递结构化内容的方式?

c++ - 为什么 C++ 编译器不转换模板函数参数以匹配预期的结果类型?