c++ - 显式模板类实例化不包括编译器生成的成员函数的符号?
问题描述
如果我显式实例化具有默认析构函数、默认移动构造函数等的模板类,并且从不在该翻译单元中使用该类型,则它不包括编译器生成的成员函数。
例如,如果模板类array2d
具有编译器生成的成员函数,例如:
array2d(array2d const &b) = default;
array2d(array2d &&b) noexcept = default;
~array2d() = default;
array2d &operator=(array2d const &) = default;
array2d &operator=(array2d &&) noexcept = default;
如果我像这样明确地实例化它:
#include "array2d.hh"
template class array2d<float>;
并将其编译为array.cc.o
我得到这些符号:
0000000000000000 W void swap<float>(array2d<float>&, array2d<float>&)
0000000000000000 W array2d<float>::swap(array2d<float>&)
0000000000000000 W array2d<float>::array2d(long, long)
0000000000000000 W array2d<float>::array2d()
0000000000000000 W array2d<float>::array2d(long, long)
0000000000000000 W array2d<float>::array2d()
0000000000000000 n array2d<float>::array2d(long, long)
0000000000000000 n array2d<float>::array2d()
0000000000000000 W array2d<float>::operator()(long, long)
0000000000000000 W array2d<float>::operator[](long)
0000000000000000 W array2d<float>::rows() const
0000000000000000 W array2d<float>::empty() const
0000000000000000 W array2d<float>::columns() const
0000000000000000 W array2d<float>::operator()(long, long) const
0000000000000000 W array2d<float>::operator[](long) const
编译器生成的成员函数的符号都不存在。
为什么显式模板类实例化不创建这些符号?
解决方案
推荐阅读
- java - Jackson dataformat XmlMapper:如何在反序列化时包含父注释
- sql - 部署 dacpac:无法部署包。警告 SQL72012
- c - C 中的内存管理器实现,用于 1 字节到 8k 字节的内存块 - 面试问题
- unreal-engine4 - 动画无法在虚幻引擎中播放
- image - 如何在 FLutter 中从 URL 加载动画 GIF?
- windows - ansible:获取连接名称的 MAC 地址:“以太网”(Windows 主机)
- python - 将所有“HH:MM:SS”转换为秒并将无效字符串转换为 NaT 的最有效方法是什么?
- prestashop - 在 Prestashop 模块中扩展 Smarty 模板
- c - 需要读取大数据时如何选择最佳缓冲区大小
- jwt - DocuSign jwt 访问令牌续订