首页 > 解决方案 > 不同TU中类模板全特化成员函数的定义

问题描述

给定一个类模板,编译时间太长。在开发和调试期间,我想通过将成员函数的定义分成单独的翻译单元来减少编译时间。只是为了完全专业化(这也是为了减少编译时间)。

是否可以在 C++ 中通过将类模板完全专业化的成员函数的定义放入单独的 TU 中来分离它们?

template<> void A<smth>::f()或者void A<smth>::f()尝试中什么都不做。我无法解决链接时间错误。

使类模板的显式实例化声明(即extern template class...)可见(或不可见)(连同删除void A<smth>::f())到定义成员函数的 TU 中,也没有给出任何结果。

标签: c++linkermember-functionsclass-templatetranslation-unit

解决方案


您的显式实例化语法是错误的(您声明了一个未定义的特化),它应该是:

template<typename T>
void A<T>::g()
{
    std::cout << __PRETTY_FUNCTION__ << std::endl;
}

template void A<int>::g();
template void A<short>::g();

演示


推荐阅读