c++ - 不同TU中类模板全特化成员函数的定义
问题描述
给定一个类模板,编译时间太长。在开发和调试期间,我想通过将成员函数的定义分成单独的翻译单元来减少编译时间。只是为了完全专业化(这也是为了减少编译时间)。
是否可以在 C++ 中通过将类模板完全专业化的成员函数的定义放入单独的 TU 中来分离它们?
template<> void A<smth>::f()
或者void A<smth>::f()
在尝试中什么都不做。我无法解决链接时间错误。
使类模板的显式实例化声明(即extern template class...
)可见(或不可见)(连同删除void A<smth>::f()
)到定义成员函数的 TU 中,也没有给出任何结果。
解决方案
您的显式实例化语法是错误的(您声明了一个未定义的特化),它应该是:
template<typename T>
void A<T>::g()
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
template void A<int>::g();
template void A<short>::g();
推荐阅读
- python - 将字符串解析为日期时间(对象)Python
- html - 在 Bootstrap 4 中合并导航栏和轮播
- android - Android API 不允许应用程序在 Play 商店中发布
- css - 自定义样式的组件在 flex wrap 中的行为不像 div
- c++ - 颤振:即使 shouldRepaint() 返回 true,自定义画家也不会重新绘制
- tensorflow - tensorflow/keras中的for循环
- javascript - 如何实现 Javascript 单例来缓存 mongo 集合?
- keras - 为什么我在运行 anaconda 提示符时会得到如此奇怪的代码行?
- reactjs - 如何在反应路由器中根据某些条件路由页面
- java - 在java中使用标准输入法打印地图:避免未使用局部变量的警告