【发布时间】:2020-06-08 01:52:00
【问题描述】:
给定一个类模板,编译时间太长。在开发和调试期间,我想通过将成员函数的定义分成单独的翻译单元来减少编译时间。只是为了完全专业化(这也是为了减少编译时间)。
在 C++ 中是否可以通过将类模板完全专业化的成员函数的定义放入单独的 TU 中来分离它们?
template<> void A<smth>::f() 或 void A<smth>::f() 在 attempt 中没有给出任何内容。我无法解决链接时间错误。
使类模板的显式实例化声明(即extern template class...)可见(或不可见)(加上删除void A<smth>::f())到定义成员函数的TU中,也没有任何作用。
【问题讨论】:
-
你需要完全专精整个班级,你不能只专精其中一个成员。
-
@super 成员不是模板函数。所以,我不想专门化它们。
-
在 C++ 中是否可以分离类模板全特化的成员函数的定义 那么你想做什么呢?只需声明类模板的 extern 显式实例化就足以让编译器仅在一个 TU 中创建它。
-
如果您只是使成员函数的定义从您明确实例化它们的位置可见,它将编译。 example
标签: c++ linker member-functions class-template translation-unit