我有一个如下所示的模板类。
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/