C++11新特性(六)——外部模板

 2023-05-28 15:28:03  阅读 0

C++11引入了外部模板的概念,用于显式实例化模板,以便在编译期间减少重复实例化,从而减少编译时间和可执行文件的大小。

1. 外部模板的定义:

在声明模板的头文件中,使用extern template关键字来声明该模板的实例化定义将在其他地方进行,而不是当前编译单元中。示例代码如下:

// Vector.h
#ifndef VECTOR_H
#define VECTOR_H

template <typename T>
class Vector {
public:
    T x;
    T y;

    Vector(T x_val = 0, T y_val = 0) : x(x_val), y(y_val) {}
    T length() const;
};

// 外部模板声明
extern template class Vector<int>;

#endif  // VECTOR_H

在上述示例中,我们使用extern template class Vector<int>;声明了Vector<int>的外部模板。

2. 用法示例:

在另一个源文件中,我们对Vector<int>进行具体实例化,并将其定义为外部模板。示例代码如下:

// Vector.cpp
#include "Vector.h"

// 具体实例化并定义为外部模板
template class Vector<int>;

// 其他代码

在上述示例中,我们在Vector.cpp源文件中对Vector<int>进行了具体实例化,并将其定义为外部模板。这意味着编译器在这个源文件中不会对Vector<int>进行实例化,而是等待链接器在其他编译单元中找到对应的实例化定义。

需要注意的是,外部模板的具体实例化定义必须在某个编译单元中进行,否则链接器将无法找到对应的实例化定义,导致链接错误。

标签:

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码