【问题标题】:Definitions of member fuction of class template full specialization in separate TUs不同TU中类模板全特化成员函数的定义
【发布时间】: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


【解决方案1】:

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

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

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

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 2011-08-22
    相关资源
    最近更新 更多